Cod sursa(job #608676)

Utilizator S7012MYPetru Trimbitas S7012MY Data 17 august 2011 17:03:27
Problema Algoritmul lui Gauss Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
#include <cstdlib>
#include <algorithm>
#include <iomanip>
#include <cmath>
#include <cassert>
#define DN 305
using namespace std;

ifstream f("gauss.in");
ofstream g("gauss.out");
int n,m;
double a[DN][DN],b[DN];

void bagaZero() {
	double x;
	for(int k=1; k<n; ++k)
		if(a[k][k]!=0)
			for(int i=k+1; i<=n; ++i) {
				x=a[i][k]/a[k][k];
				for(int j=k+1; j<=m; ++j) a[i][j]=a[i][j]-a[k][j]*x;
				b[i]=b[i]-b[k]*x;
			}
		else {
			g<<"Imposibil";
			exit(0);
		}
}

void rezSsTr() {
	double s;
	b[n]=b[n]/a[n][n];
	for(int i=n-1; 0<i; --i) {
		s=b[i];
		for(int j=i+1; j<=m; ++j) s-=(a[i][j]*b[j]);
		b[i]=s/a[i][i];
	}
}

int main()
{
	f>>n>>m;
	if(1==n && 0==m) {
		assert(1);
	}
	if(n>m) g<<"Imposibil";
	for(int i=1; i<=n; ++i) {
		for(int j=1; j<=m; ++j) f>>a[i][j];
		f>>b[i];
	}
	bagaZero();
	rezSsTr();
	for(int i=1; i<=m; ++i) g<<fixed<<setprecision(8)<<b[i]<<' ';
	return 0;
}