Pagini recente » Cod sursa (job #1678352) | Cod sursa (job #1331911) | Cod sursa (job #2861622) | Cod sursa (job #2475356) | Cod sursa (job #1214452)
#include<fstream>
#include<iomanip>
using namespace std;
#define EPS 0.00000001
ifstream fin("gauss.in");
ofstream fout("gauss.out");
int n,m,ok;
double aux,A[305][305],X[305];
int main()
{
int i,j,k,t;
fin>>n>>m;
for (i=1;i<=n;++i)
for (j=1;j<=m+1;++j)
fin>>A[i][j];
i=1, j=1;
while (i<=n && j<=m)
{
for (k=j;k<=m+1;++k)
if (A[i][k]!=0)
break;
if (k>m+1)
{
++j;
continue;
}
if (k==m+1)
break;
if (k>j)
{
for (t=i+1;t<=n;++t)
if (A[t][j]!=0)
break;
for (t=i;i<=m+1;++t)
aux=A[k][t], A[k][t]=A[i][t], A[i][t]=aux;
}
for (t=i+1;t<=m+1;++t)
A[i][t]/=A[i][j];
A[i][j]=1;
for (k=i+1;k<=n;++k)
{
for (t=j+1;t<=m+1;++t)
A[k][t]-=A[i][t]*A[k][j];
A[k][j]=0;
}
++i, ++j;
}
for (i=n,j=m;i && !ok;--i)
{
for (j=1;j<=m+1;++j)
if (A[i][j]<-EPS || A[i][j]>EPS)
break;
if (j==m+1)
ok=-1;
X[j]=A[i][m+1];
for (k=j+1;k<=m;++k)
X[j]-=A[i][k]*X[k];
}
if (ok)
fout<<"Imposibil";
else
for (i=1;i<=m;++i)
fout<<setprecision(10)<<fixed<<X[i]<<" ";
fout<<"\n";
return 0;
}