Cod sursa(job #2740070)

Utilizator StefanSanStanescu Stefan StefanSan Data 11 aprilie 2021 10:40:58
Problema Algoritmul lui Gauss Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include      <iostream>
#include      <fstream>
#include      <algorithm>
#include      <vector>
#include      <iomanip>
#include      <cmath>

#define MAX 305
#define EPS 0.0000000001

using namespace std;

ifstream in("gauss.in");
ofstream out("gauss.out");

int n, m;
double M[MAX][MAX];
double x[MAX];

void eliminare(int n, int m, double s[MAX][MAX]) {
	for (int i = 1, j = 1, k; i <= n && j <= m;) {
		for (k = i; k <= n; k++)
			if (s[k][j] != 0)break;
		if (k > n) {
			j++;
			continue;
		}
		if (k != i)
			for (int l = 1; l <= m + 1; l++) swap(s[i][l], s[k][l]);
		for (k = i + 1; k <= n; k++)
			for (int l = m + 1; l >= j; l--)
				s[k][l] -= ((s[k][j] * s[i][l]) / s[i][j]);
		i++; j++;
	}

	for (int i = n; i; i--)
		for (int j = 1; j <= m + 1; j++)
			if (fabs(s[i][j]) > EPS) {
				if (j == m + 1) {
					out << "Imposibil";
					exit(0);
				}
				x[j] = s[i][m + 1];
				for (int k = j + 1; k <= m; k++) x[j] -= s[i][k] * x[k];
				x[j] /= s[i][j];
				break;
			}
	
}

int main() {

	ios::sync_with_stdio(false);
	in.tie(NULL), out.tie(NULL);

	in >> n >> m;
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= m + 1; j++) in >> M[i][j];

	eliminare(n, m, M);

	for (int i = 1; i <= m; i++) out << fixed << setprecision(8) << x[i] << ' ';
	
	return 0;
}