Cod sursa(job #1149780)

Utilizator vladrochianVlad Rochian vladrochian Data 22 martie 2014 11:28:04
Problema Algoritmul lui Gauss Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#include <iomanip>
using namespace std;
int n,m;
double a[302][302],x[302];
void sw(int l1,int l2)
{
	for(int i=1;i<m+2;++i)
	{
		double aux=a[l1][i];
		a[l1][i]=a[l2][i];
		a[l2][i]=aux;
	}
}
inline bool nenul(double d)
{
	return d<-0.0000001 || d>0.0000001;
}
ifstream fin("gauss.in");
ofstream fout("gauss.out");
int main()
{
	int i,j,k,l;
	fin>>n>>m;
	for(i=1;i<=n;++i)
		for(j=1;j<m+2;++j)
			fin>>a[i][j];
	for(i=j=1;i<=n && j<=m;++i,++j)
	{
		for(k=i;k<=n;++k)
			if(nenul(a[k][j]))
				break;
		if(k==n+1)
		{
			++j;
			continue;
		}
		if(k!=i)
			sw(i,k);
		for(k=j+1;k<m+2;++k)
			a[i][k]/=a[i][j];
		a[i][j]=1;
		for(k=i+1;k<=n;++k)
		{
			for(l=j+1;l<m+2;++l)
				a[k][l]-=a[k][j]*a[i][l];
			a[k][j]=0;
		}
	}
	for(i=n;i;--i)
		for(j=1;j<m+2;++j)
			if(nenul(a[i][j]))
			{
				if(j==m+1)
				{
					fout<<"Imposibil\n";
					return 0;
				}
				x[j]=a[i][m+1];
				for(k=j+1;k<=m;++k)
					x[j]-=x[k]*a[i][k];
				break;
			}
	fout<<setprecision(8)<<fixed;
	for(i=1;i<=m;++i)
		fout<<x[i]<<" ";
	fout<<"\n";
	return 0;
}