Pagini recente » Cod sursa (job #329458) | Cod sursa (job #1200623) | Cod sursa (job #1354205) | Cod sursa (job #1952986) | Cod sursa (job #1968684)
#include <iostream>
#include <fstream>
#include <cmath>
#include <cstdio>
using namespace std;
const double EPS=1e-6;
double v[305][305],ans[305];
int i,j,k,n,m,l,c;
int main()
{
freopen("gauss.in", "r", stdin);
freopen("gauss.out", "w", stdout);
scanf("%d%d", &n, &m);
for(i=1; i<=n; i++)
for(j=1; j<=m+1; j++)
scanf("%lf", &v[i][j]);
i=j=1;
while(i<=n && j<=m)
{ for(k=i; k<=n; k++)
if(abs(v[k][j])>=EPS)
break;
if(k==n+1)
{
j++;
continue;
}
if(k!=i)
for(l=1; l<=m+1; l++)
swap(v[k][l],v[i][l]);
for(l=j+1; l<=m+1; l++)
v[i][l]/=v[i][j];
v[i][j]=1;
for(l=i+1; l<=n; l++)
{for(c=j+1; c<=m+1; c++)
v[l][c]-=v[i][c]*v[l][j];
v[l][j]=0;}
i++;
j++;
}
for(i=n; i>0; i--)
{
for(j=1; j<=m+1; j++)
{
if(abs(v[i][j])>=EPS)
{
if(j==m+1)
{
printf("IMPOSIBIL");
return 0;
}
ans[j]=v[i][m+1];
for(k=j+1; k<=m; k++)
ans[j]-=ans[k]*v[i][k];
break;
}
}
}
for(i=1; i<=m; i++)
printf("%.8lf ", ans[i]);
return 0;
}