Pagini recente » Cod sursa (job #1413963) | Cod sursa (job #2827514) | Cod sursa (job #1889741) | Cod sursa (job #3263757) | Cod sursa (job #1171638)
#include <fstream>
#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;
ifstream fin ("gauss.in");
const int N = 305;
const double eps = 1e-8;
int n, m;
double a[N][N], sol[N];
#define abs(x) ((x>-x)?(x):(-x))
int main() {
fin >> m >> n;
for (int i = 1; i <= m; ++i)
for (int j = 1; j <= n + 1; ++j)
fin >> a[i][j];
int i = 1, j = 1, k;
while (i <= m && j <= n) {
for (k = i; k <= m; ++k)
if (abs (a[k][j]) > eps)
break;
if (k == m + 1) {
j++;
continue;
}
if (k != i)
for (int p = 1; p <= n + 1; ++p)
swap (a[k][p], a[i][p]);
for (int p = j + 1; p <= n + 1; ++p)
a[i][p] /= a[i][j];
a[i][j] = 1;
for (int p = i + 1; p <= m; ++p) {
for (int q = j + 1; q <= n + 1; ++q)
a[p][q] -= a[i][q] * a[p][j];
a[p][j] = 0;
}
++i, ++j;
}
for (i = m; i; --i)
for (j = 1; j <= n + 1; ++j)
if (abs (a[i][j]) > eps) {
if (j == n + 1) {
printf ("Imposibil");
return 0;
}
sol[j] = a[i][n+1];
for (k = j + 1; k <= n; ++k)
sol[j] -= sol[k] * a[i][k];
break;
}
freopen ("gauss.out", "w", stdout);
for (int i = 1; i <= m; ++i)
printf("%.10lf ", sol[i]);
}