Pagini recente » Cod sursa (job #2784364) | Cod sursa (job #774027) | Cod sursa (job #1203064) | Cod sursa (job #3226512) | Cod sursa (job #3295672)
#include <iostream>
#include <fstream>
#include <cmath>
#include <iomanip>
std::ifstream fin("gauss.in");
std::ofstream fout("gauss.out");
const int MAX_N = 300;
const int MAX_M = 300;
const double EPS = 1e-9;
int n, m;
double a[MAX_N + 1][MAX_M + 2];
double ans[MAX_M + 1];
void solve() {
fin >> n >> m;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m + 1; j++)
fin >> a[i][j];
int i = 1, j = 1;
while (i <= n && j <= m) {
int line = 0;
for (int k = i; k <= n; k++)
if (std::abs(a[k][j]) > EPS)
line = k;
if (!line) {
j++;
continue;
}
for (int k = j; k <= m + 1; k++)
std::swap(a[i][k], a[line][k]);
for (int k = j + 1; k <= m + 1; k++)
a[i][k] /= a[i][j];
a[i][j] = 1;
for (int k = i + 1; k <= n; k++) {
for (int col = j + 1; col <= m + 1; col++)
a[k][col] -= a[i][col] * a[k][j];
a[k][j] = 0;
}
i++; j++;
}
for (int i = n; i >= 1; i--) {
for (int j = 1; j <= m + 1; j++)
if (std::abs(a[i][j]) > EPS) {
if (j == m + 1) {
fout << "Imposibil\n";
exit(0);
}
ans[j] = a[i][m + 1];
for (int k = j + 1; k <= m; k++)
ans[j] -= ans[k] * a[i][k];
break;
}
}
fout << std::fixed << std::setprecision(10);
for (int i = 1; i <= m; i++)
fout << ans[i] << ' ';
}
int main() {
solve();
return 0;
}