Pagini recente » Cod sursa (job #2705703) | Cod sursa (job #1451508) | Cod sursa (job #1606193) | Cod sursa (job #318595) | Cod sursa (job #1577558)
#include <iostream>
#include <cstdio>
#define MAXN 350
using namespace std;
double a[MAXN][MAXN], sol[MAXN];
int n, m, p[MAXN];
const double EPS = 1e-9;
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("%.8lf ", sol[i]);
}
int abs(double x)
{
if (x < 0) return -x;
return x;
}
int posibil()
{
for (int i = 0; i < n; i++) {
int ok = 0;
for (int j = 0; j < m; j++)
ok |= (abs(a[i][j]) > EPS);
if (!ok && abs(a[i][m]) > EPS)
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;
}