Pagini recente » Cod sursa (job #3156668) | Cod sursa (job #2988814) | Cod sursa (job #1249575) | Cod sursa (job #1897176) | Cod sursa (job #2918769)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("gauss.in");
ofstream fout("gauss.out");
const double eps=1e-8;
double mat[305][305],sol[305];
int n,m,i,j,k;
void myswap(double a, double b)
{
double c=a;
a=b;
b=c;
}
void swaplines(int l1, int l2)
{
for(int i=1;i<=m+1;i++)
myswap(mat[l1][i],mat[l2][i]);
}
void gauss()
{
i=1;j=1;
while(i<=n&&j<=m)
{
for(k=i;k<=n;k++)
if(mat[k][j]<-eps||mat[k][j]>eps)
break;
if(k==n+1){j++;continue;}
if(k!=i)swaplines(i,k);
for(k=m+1;k>=j;k--)
mat[i][k]/=mat[i][j];
for(k=i+1;k<=n;k++)
for(int l=m+1;l>=j;l--)
mat[k][l]-=mat[k][j]*mat[i][l];
i++;j++;
}
for(i=n;i>=1;i--)
for(j=1;j<=m+1;j++)
if(mat[i][j]<-eps||mat[i][j]>eps)
{
if(j==m+1)
{
fout<<"Imposibil\n";
exit(0);
}
sol[j]=mat[i][m+1];
for(k=j+1;k<=m;k++)
sol[j]-=sol[k]*mat[i][k];
break;
}
}
signed main()
{
fin>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m+1;j++)
fin>>mat[i][j];
gauss();
fout<<fixed<<setprecision(8);
for(i=1;i<=m;i++)
fout<<sol[i]<<' ';
return 0;
}