Cod sursa(job #724335)

Utilizator DSzprogDombi Szabolcs DSzprog Data 26 martie 2012 13:58:26
Problema Algoritmul lui Gauss Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <cstdio>
#include <cmath>

int n, m;
double mat[300][300];
double slv[300];

int main() {
	FILE * in = fopen("gauss.in", "rt");
	FILE * out = fopen("gauss.out", "wt");
	
	fscanf(in, "%d%d", &n, &m);
	for (int i = 0; i < n; ++i) {
		for (int j = 0; j < m; ++j) {
			fscanf(in, "%lf", &mat[i][j]);
		}
		fscanf(in, "%lf", &slv[i]);
	}
	
	for (int i = 0; i < n; ++i) {
		int l = 0;
		while (l < n && !mat[l][i]) {
			++l;
		}
		if (l == n) {
			fprintf(out, "Imposibil");
			goto end;
		}
		double div = mat[l][i];
		for (int j = i; j < m; ++j) {
			mat[l][j] /= div;
		}
		slv[l] /= div;
		for (int j = 0; j < n; ++j) {
			double fact = mat[j][i];
			if (l != j) {
				for (int k = 0; k < m; ++k) {
					mat[j][k] -= mat[l][k] * fact;
				}
				slv[j] -= slv[l] * fact;
			}
		}
	}
	
	for (int i = 0; i < m; ++i) {
		fprintf(out, "%.8lf ", slv[i]);
	}
	
	end:
	fclose(in);
	fclose(out);
}