Pagini recente » Cod sursa (job #1335203) | Cod sursa (job #304463) | Cod sursa (job #2439860) | Cod sursa (job #3252598) | Cod sursa (job #717025)
Cod sursa(job #717025)
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;
const int dim = 305;
const double e = 0.0000001;
int N, M, viz[dim];
double A[dim][dim], X[dim];
void cit ()
{
scanf ("%d%d", &N, &M);
for (int i = 1; i <= N; i++)
for (int j = 1; j <= M + 1; j++)
scanf ("%lf", &A[i][j]);
}
void gauss ()
{
int i, j, n, m;
for (i = j = 1; i <= N && j <= M; i++, j++)
{
for (n = i; n <= N && A[n][j] > -e && A[n][j] < e; n++);
if (n > N)
{
i--;
continue;
}
for (m = j; m <= M + 1; m++)
swap (A[i][m], A[n][m]);
for (n = i; n <= N; n++)
{
if (A[n][j] != 0)
{
for (m = j + 1; m <= M + 1; m++)
A[n][m] /= A[n][j];
A[n][j] = 1;
if (n != i)
{
for (m = j; m <= M + 1; m++)
A[n][m] -= A[i][m];
}
}
}
}
for (i = N; i >= 1; i--)
{
m = 0;
for (j = 1; j <= M; j++)
{
if (A[i][j] > -e && A[i][j] < e)
continue;
if (viz[j])
A[i][j] *= X[j];
else
{
if (m == 0)
m = j;
else
{
X[j] = 0;
A[i][j] = 0;
viz[j] = 1;
}
}
}
for (j = 1; j <= M; j++)
if (j != m)
A[i][M+1] -= A[i][j];
if (m == 0)
{
if (!(A[i][M+1] > -e && A[i][M+1] < e))
{
printf ("Imposibil");
return;
}
}
else
{
X[m] = A[i][M+1] / A[i][m];
A[i][m] = 0;
viz[m] = 1;
}
}
for (int i = 1; i <= M; i++)
printf ("%.8lf ", X[i]);
}
int main ()
{
freopen ("gauss.in", "r", stdin);
freopen ("gauss.out", "w", stdout);
cit ();
gauss ();
return 0;
}