Cod sursa(job #1086575)

Utilizator Kira96Denis Mita Kira96 Data 18 ianuarie 2014 12:38:13
Problema Algoritmul lui Gauss Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include<fstream>
#include<cmath>
#include<iomanip>
#define N 310
#define EPS 0.001
using namespace std;
ifstream f("gauss.in");
ofstream g("gauss.out");
int n,m,i,j,k,l;
double A[N][N],X[N];
int main ()
{
	f>>n>>m;
	for(i=1;i<=n;++i)
		for(j=1;j<=m+1;++j)
			f>>A[i][j];
	for(j=1;j<=m;++j)
	{
		for(i=j;i<=n;++i)
			if(A[i][j]>EPS||A[i][j]<-EPS)
				break;
		if(i>n)
			continue;
		if(i!=j)
			for(k=1;k<=m+1;++k)
				swap(A[i][k],A[j][k]);
		for(k=j+1;k<=m+1;++k)
			A[j][k]/=A[j][j];
		A[j][j]=1;
		for(k=j+1;k<=n;++k)
		{
			for(l=j+1;l<=m+1;++l)
				A[k][l]-=A[j][l]*A[k][j];
			A[k][j]=0;
		}
	}
	for(i=n;i>=1;--i)
		for(j=1;j<=m+1;++j)
			if(A[i][j]>EPS||A[i][j]<-EPS)
			{
				if(j==m+1)
				{
					g<<"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;
			}
	for(i=1;i<=m;++i)
		g<<fixed<<setprecision(9)<<X[i]<<" ";
	return 0;
}