Cod sursa(job #931175)

Utilizator taigi100Cazacu Robert taigi100 Data 28 martie 2013 01:04:41
Problema Algoritmul lui Gauss Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include<stdio.h>

#define max 310
#define eps 0.0000001

int n,m;
double A[max][max];
double X[max];

int main()
{

	freopen("gauss.in","r",stdin);
	freopen("gauss.out","w",stdout);

	scanf("%d %d",&n,&m);

	for(int i=1;i<=n;i++)
		for(int j=1;j<=m+1;j++)
			scanf("%lf ",&A[i][j]);

	int i,j,k;
	double aux;
	
	i=j=1;

	while(i<=n && j<=m)
	{
		for(k=i;k<=n;i++)
			if(A[k][j]<-eps || A[k][j]>eps)
				break;

		if(k==n+1)
		{
			j++;
			continue;
		}
		if(i!=k)
		{
			for(int q=1;q<=m+1;q++)
			{
				aux=A[i][q];
				A[i][q]=A[k][q];
				A[k][q]=aux;
			}
		}

		for(int w=j+1;w<=m+1;w++)
			A[i][w]=A[i][w]/A[i][j];
		A[i][j]=1;

		for(int p=i+1;p<=n;p++)
		{
			for(int l=j+1;l<=m+1;l++)
				A[p][l]-=A[i][l]*A[p][j];
			A[p][j]=0;
		}
		i++;j++;

	}

	for(int i=n;i>0;i--)
	{
		for(int j=1;j<=m+1;j++)
		 if(A[i][j]<-eps || A[i][j]>eps)
		 {
			 if(j==m+1)
			 {
				 printf("Imposibil\n");
				 return 0;
			 }

			 X[j]=A[i][m+1];
			 for(int k=j+1;k<=m;k++)
				 X[j]-=A[i][k]*X[k];
			 break;
		 }
	}
    for(int i=1;i<=m;i++)
		printf("%.8lf ",X[i]);
	return 0;
}