Pagini recente » Cod sursa (job #1405641) | Cod sursa (job #501646) | Cod sursa (job #1899220) | Cod sursa (job #1327187) | Cod sursa (job #2878169)
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 300;
const int MAXM = 300;
const double eps = 0.0000001;
int n, m;
double mat[MAXN + 3][MAXM + 3];
double x[MAXM + 2];
int main() {
freopen("gauss.in", "r", stdin);
freopen("gauss.out", "w", stdout);
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(false);
cin >> n >> m;
for (int i = 1; i <= n; ++ i)
for (int j = 1; j <= m + 1; ++ j)
cin >> mat[i][j];
int i = 1, j = 1, k;
while (i <= n && j <= m) {
for (k = i; k <= n; ++ k)
if (mat[k][j] >= eps || mat[k][j] <= -eps)
break;
if (k == n + 1) {
++ j;
continue;
}
if (k != i) {
for (int l = 1; l <= m + 1; ++ l) {
double aux = mat[i][l];
mat[i][l] = mat[k][l];
mat[k][l] = aux;
}
}
for (int l = j + 1; l <= m + 1; ++ l) {
mat[i][l] /= mat[i][j];
}
mat[i][j] = 1;
for (int u = i + 1; u <= n; ++ u) {
for (int l = j + 1; l <= m + 1; ++ l) {
mat[u][l] -= mat[u][j] * mat[i][l];
}
mat[u][j] = 0;
}
++ i;
++ j;
}
for (int i = n; i >= 1; -- i) {
for (int j = 1; j <= m + 1; ++ j) {
if (mat[i][j] > eps || mat[i][j] < -eps) {
if (j == m + 1) {
cout << "Imposibil\n";
return 0;
}
x[j] = mat[i][m + 1];
for (int k = j + 1; k <= m; ++ k)
x[j] -= x[k] * mat[i][k];
break;
}
}
}
for (int i = 1; i <= m; ++ i)
cout << fixed << setprecision(8) << x[i] << " ";
cout << '\n';
return 0;
}