Cod sursa(job #650473)
#include <iostream>
#include <cmath>
using namespace std;
#define MAXN 550
#define EPS 1e-7
int n, m;
double a[MAXN][MAXN], x[MAXN];
int main()
{
FILE* fin = fopen("gauss.in", "r");
FILE* fout = fopen("gauss.out", "w");
fscanf(fin, "%d %d\n", &n, &m);
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m + 1; ++j) {
fscanf (fin, "%lf", &a[i][j]);
}
}
for (int i = 1, j = 1, k; i <= n && j <= m; ++j) {
for (k = i; k <= n; ++k) {
if (a[k][j] < -EPS || EPS < a[k][j]) {
break;
}
}
if (k == n + 1) {
continue;
}
if (k != i) {
for (int l = 1; l <= m + 1; ++l) {
swap(a[i][l], a[k][l]);
}
}
for (int l = j + 1; l <= m + 1; ++l) {
a[i][l] /= a[i][j];
}
for (int u = i + 1; u <= n; ++u) {
for (int l = j + 1; l <= m + 1; ++l) {
a[u][l] -= a[u][j] * a[i][l];
}
a[u][j] = 0.0;
}
++i;
}
for (int i = n; i; --i) {
for (int j = 1; j <= m + 1; ++j) {
if (a[i][j] > EPS || a[i][j] < -EPS) {
if (j == m + 1) {
fputs("Imposibil!", fout);
return 0;
}
x[j] = a[i][m + 1];
for (int k = j + 1; k <= m; ++k) {
x[j] -= x[k] * a[i][k];
}
break;
}
}
}
for (int i = 1; i <= m; ++i) {
fprintf (fout, "%.8lf ", x[i]);
}
fprintf (fout, "\n");
fclose(fin);
fclose(fout);
return 0;
}