Cod sursa(job #643076)

Utilizator ProcopliucProcopliuc Adrian Procopliuc Data 2 decembrie 2011 21:09:32
Problema Algoritmul lui Gauss Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
# include <stdio.h>
# define pr 0.000001
using namespace std;

double a[400][400],x[400],xx;

int n,m,i,j,k,q,ok;

void inter (int i,int j)
{
	int k;
	double aux;
	for (k=1;k<=m;k++)
	{
		aux=a[i][k];
		a[i][k]=a[j][k];
		a[j][k]=aux;
	}
	
}


int main ()
{
	freopen ("gauss.in","r",stdin);
	freopen ("gauss.out","w",stdout);
	
	scanf ("%i%i",&n,&m);
	m++;
	for (i=1;i<=n;i++)
		for (j=1;j<=m;j++)
			scanf ("%lf",&a[i][j]);
		
	i=1;
	j=1;
	while (i<=n && j<m)
	{
		ok=1;
		if (a[i][j]==0)
		{
			ok=0;
			int k;
			for (k=i+1;k<=n;k++)
				if (a[k][j]!=0)
				{
					inter (k,i);
					ok=1;
				}
		}
		if (ok==0)
			j++;
		else
		{
			xx=a[i][j];
			for (k=j;k<=m;k++)
				a[i][k]=a[i][k]/xx;
			for (k=i+1;k<=n;k++)
				if (a[k][j]!=0)
				{
					xx=a[k][j];
					for (q=j;q<=m;q++)
						a[k][q]-=xx*a[i][q];
				}
		}
		
		i++;
		j++;
	}
	
	for (i=n;i>=1;i--)
		for (j=1;j<=m;j++)
		if (a[i][j]>pr || a[i][j]<-pr)
		{			
			
			if (j==m)
			{
				printf ("Imposibil");
				return 0;
			}
		    
			x[j]=a[i][m];
			for (k=j+1;k<m;k++)
				x[j]-=a[i][k]*x[k];
			break;
		}
	
	for (i=1;i<m;i++)
		printf ("%.8lf ",x[i]);
	
	return 0;
}