Cod sursa(job #822637)

Utilizator ahmed.abdraboahmed.abdrabo ahmed.abdrabo Data 23 noiembrie 2012 20:46:52
Problema Algoritmul lui Gauss Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
#include <iomanip>
#include <iostream>
#include <vector>

using namespace std;

const double eps = 1e-9;

int N, M;

int main() {
	ifstream cin("grader_test1.in");
	ofstream cout("gauss.out");
	cin >> N >> M;
	if (M > N) {
		cout << "Imposibil";
		return 0;
	}
	vector<vector<double> > A(N, vector<double> (M + 1, 0));
	for (int i = 0; i < N; i++) {
		for (int j = 0; j <= M; j++) {
			cin >> A[i][j];
		}
	}
	for (int i = 0; i < M; i++) {
		int j = i;
		for (; j < N; j++) {
			if (A[j][i] < -eps || eps < A[j][i]) {
				break;
			}
		}
		if (j == N) {
			cout << "Imposibil";
			return 0;
		}
		A[i].swap(A[j]);
		double pivot = A[i][i];
		for (int j = 0; j <= M; j++) {
			A[i][j] /= pivot;
		}
		for (int j = 0; j < N; j++) {
			if (i != j) {
				double factor = -A[j][i];
				for (int k = 0; k <= M; k++) {
					A[j][k] += factor * A[i][k];
				}
			}
		}
	}
	for (int i = 0; i < M; i++) {
		cout << fixed << setprecision(8) << A[i][M] << " ";
	}
	return 0;
}