Pagini recente » Borderou de evaluare (job #1621435) | Borderou de evaluare (job #955806) | Cod sursa (job #1399343)
#include<fstream>
#include<iomanip>
using namespace std;
#define EPS 0.00000001
ifstream fin("gauss.in");
ofstream fout("gauss.out");
int n,m;
double aux,A[305][305],X[305];
bool ok=true;
string IMP="Imposibil";
int main()
{
int i,j,k,ii;
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)
{
for (k=j;k<=m;++k)
if (!(-EPS<A[i][k] && A[i][k]<EPS))
break;
if (k>m+1)
{
++j;
continue;
}
if (k==m+1)
break;
if (k>j)
{
for (k=i+1;k<=n;++k)
if (!(-EPS<A[k][j] && A[k][j]<EPS))
break;
for (ii=j;ii<=m+1;++ii)
aux=A[k][ii], A[k][ii]=A[i][ii], A[i][ii]=aux;
}
for (k=j+1;k<=m+1;++k)
A[i][k]/=A[i][j];
A[i][j]=1;
for (k=i+1;k<=n;++k)
if (!(-EPS<A[k][j] && A[k][j]<EPS))
{
for (ii=j+1;ii<=m+1;++ii)
A[k][ii]-=A[k][j]*A[i][ii];
A[k][j]=0;
}
++i, ++j;
}
for (i=n;i>0 && ok;--i)
{
for (j=1;j<=m+1;++j)
if (!(-EPS<A[i][j] && A[i][j]<EPS))
break;
if (j==m+1)
{
ok=false;
continue;
}
if (j>m+1)
continue;
X[j]=A[i][m+1];
for (k=j+1;k<=m;++k)
X[j]-=X[k]*A[i][k];
}
if (!ok)
fout<<IMP;
else
for (i=1;i<=m;++i)
fout<<setprecision(8)<<fixed<<X[i]<<" ";
fout<<"\n";
return 0;
}