Pagini recente » Cod sursa (job #622768) | Cod sursa (job #2101868) | Cod sursa (job #1481543) | Cod sursa (job #926871) | Cod sursa (job #2340318)
#include <bits/stdc++.h>
using namespace std;
const int N = 300 + 7;
int n, m;
double gauss[N][N];
double res[N];
void Reduce() {
int i = 1;
int j = 1;
while (i <= n && j <= m) {
///cout << "# " << i << " , " << j << "\n";
int k = 0;
for (k = i; k <= n; k++) {
if (gauss[k][j] != 0) {
break;
}
}
if (k > n) {
j++;
} else {
if (k != i) {
for (int l = 1; l <= m + 1; l++) {
swap(gauss[i][l], gauss[k][l]);
}
}
double value = gauss[i][j];
for (int l = j; l <= m + 1; l++) {
gauss[i][l] /= value;
}
for (int u = i + 1; u <= n; u++) {
double value = gauss[u][j];
for (int l = 1; l <= m + 1; l++) {
gauss[u][l] -= value * gauss[i][l];
}
}
i++;
j++;
}
}
}
void FindSolution() {
Reduce();
for (int equation = n; equation >= 1; equation--) {
for (int j = 1; j <= m + 1; j++) {
if (gauss[equation][j] != 0) {
if (j == m + 1) {
cout << "Imposibil\n";
return;
}
res[j] = gauss[equation][m + 1];
for (int l = j + 1; l <= m; l++) {
res[j] -= res[l] * gauss[equation][l];
}
break;
}
}
}
for (int j = 1; j <= m; j++) {
cout << fixed << setprecision(10) << res[j] << " ";
}
cout << "\n";
}
int main() {
freopen ("gauss.in", "r", stdin);
freopen ("gauss.out", "w", stdout);
cin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m + 1; j++) {
cin >> gauss[i][j];
}
}
FindSolution();
}