Cod sursa(job #933491)

Utilizator raulstoinStoin Raul raulstoin Data 30 martie 2013 00:21:37
Problema Algoritmul lui Gauss Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include<fstream>
#define NMAX 305
#define PREC 0.000001
using namespace std;
struct MAT
{
	double col[NMAX];
}A[NMAX],aux;
int n,m;
double sol[NMAX];
void read()
{
	ifstream fin("gauss.in");
	fin>>n>>m;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m+1;j++)
			fin>>A[i].col[j];
	fin.close();
}
void gauss()
{
	for(int i=1,j=1,k;i<=n && j<=m;i++,j++)
	{
		for(k=i;k<=n;k++)
			if(A[k].col[j]<-PREC || A[k].col[j]>PREC)
				break;
		if(k>n)
		{
			i--;
			continue;
		}
		if(k!=i)
		{
			aux=A[i];
			A[i]=A[k];
			A[k]=aux;
		}
		for(k=j+1;k<=m+1;k++)
			A[i].col[k]/=A[i].col[j];
		A[i].col[j]=1;
		for(k=i+1;k<=n;k++)
		{
			for(int l=j+1;l<=m+1;l++)
				A[k].col[l]-=A[k].col[j]*A[i].col[l];
			A[k].col[j]=0;
		}
	}
}
bool solve()
{
	for(int i=n;i;i--)
		for(int j=1;j<=m+1;j++)
			if(A[i].col[j]<-PREC || A[i].col[j]>PREC)
			{
				if(j==m+1)
					return 0;
				sol[j]=A[i].col[m+1];
				for(int k=j+1;k<=m;k++)
					sol[j]-=sol[k]*A[i].col[k];
				break;
			}
	return 1;
}
void print()
{
	ofstream fout("gauss.out");
	if(solve())
		for(int i=1;i<=m;i++)
		{
			fout.precision(7);
			fout<<fixed<<sol[i]<<' ';
		}
	else
		fout<<"Imposibil\n";
	fout.close();
}
int main()
{
	read();
	gauss();
	print();
	return 0;
}