Cod sursa(job #623368)

Utilizator chiar_nimeninimeni chiar_nimeni Data 19 octombrie 2011 20:06:54
Problema Algoritmul lui Gauss Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
# include <cstdio>
# include <algorithm>

# define EPS 0.000000001

using namespace std;

float a[310][310],mx,c;
int m,n,i,j,t,k,q;

int main ()
{
	freopen ("gauss.in","r",stdin);
	freopen ("gauss.out","w",stdout);
	scanf ("%d %d",&n, &m);
	for (i=1; i<=m; i++)
	{
		for (j=1; j<=n+1; j++)
			scanf ("%f ", &a[i][j]);
	}
	for (i=1; i<=min (n,m); i++)
	{
		mx=1;
		if (a[i][i]<EPS && a[i][i]>-EPS) 
		{
		{
			mx=0;
			for (t=i+1; t<=m; t++)
			{
				if (a[t][i]>mx) 
				{
					mx=a[t][i];
					q=t;
				}
			}
		}
		if (mx==0)
		{
			printf ("imposibil\n");
			return 0;
		}			
		for (k=1; k<=n+1; k++) 
		{ 
			c=a[i][k]; 
			a[i][k]=a[q][k]; 
			a[q][k]=c; 
		}
		}
		
		for (j=n+1; j>=1; j--) a[i][j]=(float)a[i][j]/a[i][i];
		for (j=i+1; j<=m; j++)
		{
			for (t=i+1; t<=n+1; t++)
				a[j][t]=a[j][t]-a[j][i]*a[i][t];
		}
	}
	for (i=n; i>=1; i--) 
	{
		for (j=i+1; j<=n; j++)
		{
			a[i][n+1]-=(a[j][n+1]*a[i][j]);
		}
	}
	for (i=1; i<=n; i++) printf ("%.8f ",a[i][n+1]);
	return 0;
}