Pagini recente » Cod sursa (job #2388883) | Cod sursa (job #2948207) | Cod sursa (job #1133458) | Monitorul de evaluare | Cod sursa (job #2740069)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <iomanip>
#include <cmath>
#define MAX 55
#define MOD 1000000007
#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;
}