Pagini recente » Cod sursa (job #2103673) | Cod sursa (job #92442) | Cod sursa (job #1323437) | Cod sursa (job #1395685) | Cod sursa (job #1162102)
#include <fstream>
#include <cstdlib>
#include <iomanip>
#include <cstring>
#define NM 310
using namespace std;
ifstream f("gauss.in");
ofstream g("gauss.out");
int N, M;
double A[NM][NM];
double X[NM];
void Read ()
{
f >> N >> M;
for (int i=1; i<=N; i++)
for (int j=1; j<=M+1; j++)
f >> A[i][j];
f.close();
}
void Print (int ok)
{
if (ok==0)
g << "Imposibil";
else
for (int j=1; j<=M; j++)
g << fixed << setprecision(10) << X[j] << ' ';
g << '\n';
g.close();
exit(0);
}
void Modify ()
{
for (int i=1, j=1; i<=N && j<=M; )
{
int l=0;
for (l=i; l<=N; l++)
if (A[l][j]!=0)
break;
if (l>N)
{
j++;
continue;
}
for (int c=1; c<=M+1; c++)
swap(A[i][c], A[l][c]);
double x=A[i][j];
for (int c=1; c<=M+1; c++)
A[i][c]/=x;
for (l=i+1; l<=N; l++)
{
double x=A[l][j];
for (int c=1; c<=M+1; c++)
A[l][c]-=x*A[i][c];
}
i++;
j++;
}
}
void Solve ()
{
for (int i=N; i>=1; i--)
{
int p=0;
for (p=1; p<=M; p++)
if (A[i][p]!=0)
break;
if (p>M)
{
if (A[i][M+1]!=0)
Print(0);
continue;
}
X[p]=A[i][M+1];
for (int c=p+1; c<=M; c++)
X[p]-=X[c] * A[i][c];
}
}
int main ()
{
Read();
Modify();
Solve();
Print(1);
return 0;
}