Pagini recente » Cod sursa (job #291742) | Cod sursa (job #2175819) | Cod sursa (job #1003495) | Cod sursa (job #574603) | Cod sursa (job #2477319)
#include <iostream>
#include <cstdio>
#include <cmath>
#include <iomanip>
using namespace std;
const int N = 300 + 7;
const double EPS = 1e-14;
int n, m, pos[N];
double mat[N][N], ans[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 >> mat[i][j];
for (int i = 1; i <= n; i++)
{
int j = 1;
while (j <= m + 1 && fabs(mat[i][j]) < EPS)
j++;
if (j == m + 2)
continue;
if (j == m + 1)
{
cout << "Imposibil\n";
return 0;
}
pos[i] = j;
for (int k = i; k <= n; k++)
if (mat[k][j])
{
for (int p = j + 1; p <= m + 1; p++)
mat[k][p] /= mat[k][j];
mat[k][j] = 1;
if (k != i)
for (int p = j; p <= m + 1; p++)
mat[k][p] -= mat[i][p];
}
}
for (int i = n; i >= 1; i--)
if (pos[i])
{
ans[pos[i]] = mat[i][m + 1];
for (int j = m; j > pos[i]; j--)
ans[pos[i]] -= mat[i][j] * ans[j];
}
for (int i = 1; i <= m; i++)
cout << fixed << setprecision(10) << ans[i] << " ";
cout << "\n";
return 0;
}