Cod sursa(job #1700744)

Utilizator mihai995mihai995 mihai995 Data 11 mai 2016 08:36:53
Problema Algoritmul lui Gauss Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <fstream>
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;

const int N = 300;

double coef[N][N + 1];

inline bool zero(double d){
	return fabs(d) < 1e-12;
}
bool gauss(double a[N][N + 1], int nrEq, int nrVars){
	for (int x = 0; x < nrVars; x++){
		int pos = x;
		while ( pos < nrEq && zero(a[pos][x]) )
			pos++;
		if ( pos == nrEq ) continue;

		cerr << x << ' ' << pos << '\n';

		double val = 1.0 / a[pos][x];
		for (int i = 0; i <= nrVars; i++){
			swap( a[x][i], a[pos][i] );
			a[x][i] *= val;
		}
		for (int y = 0; y < nrEq; y++) if ( x != y ){
			val = a[y][x];
			for (int i = 0; i <= nrVars; i++)
				a[y][i] -= val * a[x][i];
		}
	}
	for (int x = 0; x < nrEq; x++)
		if ( ( x >= nrVars || zero( a[x][x] ) ) && !zero( a[x][nrVars] ) )
			return false;
	return true;
}

int main(){
	ifstream in("gauss.in");
	ofstream out("gauss.out");

	int nrEq, nrVars;

	in >> nrEq >> nrVars;
	for (int i = 0; i < nrEq; i++)
		for (int j = 0; j <= nrVars; j++)
			in >> coef[i][j];

	if ( !gauss(coef, nrEq, nrVars) ) {
		out << "Imposibil\n";
		return 0;
	}
	out << setprecision(10) << fixed;
	for (int i = 0; i < nrEq; i++)
		out << coef[i][nrVars] << ' ';
	out << '\n';
	return 0;
}