Pagini recente » Cod sursa (job #2207205) | Cod sursa (job #1334560) | Cod sursa (job #936909) | Cod sursa (job #847111) | Cod sursa (job #1577451)
#include <iostream>
#include <cstdio>
#define MAXN 350
using namespace std;
double a[MAXN][MAXN], sol[MAXN];
int n, m, p[MAXN];
void citire()
{
scanf("%d %d", &n, &m);
for (int i = 0; i < n; i++)
for (int j = 0; j <= m; j++)
scanf("%lf", &a[i][j]);
}
void exch(double x, double y)
{
double aux = x;
x = y;
y = aux;
}
void exch(double e[MAXN], double f[MAXN])
{
for (int i = 0; i <= m; i++)
exch(e[i], f[i]);
}
void solve()
{
for (int i = 0, j = 0; i < n && j < m; i++, j++)
{
int pos = -1;
while (true) {
for (int ec = i; ec < n; ec++)
if (a[ec][j])
pos = ec, ec = n;
if (pos != -1) break;
j++;
if (j >= m)
return;
}
exch(a[i], a[pos]);
double val = a[i][j];
for (int k = j; k <= m; k++)
a[i][k] /= val;
for (int ki = i+1; ki < n; ki++) {
val = a[ki][j];
for (int kj = j; kj <= m; kj++)
a[ki][kj] -= a[i][kj]*val;
}
p[i] = j;
}
}
void debug()
{
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++)
printf("%lf\t", a[i][j]);
printf("=\t%lf\n", a[i][m]);
}
}
void afisare()
{
for (int i = n-1; i >= 0; i--) {
double sum = 0;
for (int j = p[i]+1; j < m; j++)
sum += a[i][j] * sol[j];
sol[p[i]] = a[i][m] - sum;
}
for (int i = 0; i < m; i++)
printf("%lf ", sol[i]);
}
int posibil()
{
for (int i = 0; i < n; i++) {
int ok = 0;
for (int j = 0; j < m; j++)
ok |= (a[i][j] != 0);
if (!ok && a[i][m] != 0)
return 0;
}
return 1;
}
int main()
{
freopen("gauss.in", "r", stdin);
freopen("gauss.out", "w", stdout);
citire();
solve();
//debug();
if (posibil())
afisare();
else
printf("Imposibil");
return 0;
}