Pagini recente » Cod sursa (job #3040583) | Cod sursa (job #925197) | Cod sursa (job #636295) | Cod sursa (job #596341) | Cod sursa (job #1679668)
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstring>
#include <iomanip>
using namespace std;
ifstream fin("gauss.in");
ofstream fout("gauss.out");
const double eps = 1e-10;
double a[305][305], ans[305];
int main() {
int n, m;
fin >> n >> m;
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= m + 1; ++j)
fin >> a[i][j];
for (int i = 1, j = 1; i <= n && j <= m; ++i, ++j) {
for (int k = i; k <= n; ++k) {
if (a[k][j] < -eps || a[k][j] > eps) {
for (int l = 1; l <= m + 1; ++l)
swap(a[k][l], a[i][l]);
}
}
if (a[i][j] >= -eps && a[i][j] <= -eps) {
--i;
continue;
}
for (int l = j + 1; l <= m + 1; ++l)
a[i][l] /= a[i][j];
a[i][j] = 1;
for (int k = i + 1; k <= n; ++k) {
for (int l = j + 1; l <= m + 1; ++l)
a[k][l] -= a[k][j] * a[i][l];
a[k][j] = 0;
}
}
for (int i = n; i; --i) {
for (int j = 1; j <= m + 1; ++j) {
if (a[i][j] >= -eps && a[i][j] <= eps)
continue;
if (j == m + 1) {
fout << "Imposibil";
return 0;
}
ans[j] = a[i][m + 1];
for (int l = j + 1; l <= m; ++l)
ans[j] -= a[i][l] * ans[l];
break;
}
}
for (int i = 1; i <= m; ++i)
fout << setprecision(10) << fixed << ans[i] << ' ';
return 0;
}
//Trust me, I'm the Doctor!