Pagini recente » Cod sursa (job #2020105) | Cod sursa (job #2017950) | Cod sursa (job #1436019) | Cod sursa (job #2036545) | Cod sursa (job #848931)
Cod sursa(job #848931)
#include<cstdio>
#define MAX 300
#define eps 0.0000000001
int n,m;
double a[MAX][MAX];
double REZ[MAX];
int solve_gauss()
{
int i=1,j=1,k,l, aux,u ;
while( i <= n && j <= m )
{
for( k=i ; k <= n ; ++k )
if(a[k][j]<-eps || a[k][j]>eps)
break;
if( k == n+1 )
{
++j;
continue;
}
if(k!= i)
for( l=1; l<=m+1;++l)
{
aux=a[i][l];
a[i][l]=a[k][l];
a[k][l]=aux;
}
for(u=j+1; u <= m+1; ++u)
a[i][u] /=a[i][j];
a[i][j]=1;
for (u=i+1;u<=n;++u)
{
for(l=j+1;l<=m+1;++l)
a[u][l] -= a[u][j] * a[i][l];
a[u][j]=0;
}
++i;
++j;
}
for(int i=n;i>0;--i)
for(int j=1;j<=m+1;++j)
if(a[i][j]<-eps || a[i][j]>eps)
{
if (j == m+1)
return 0 ;
REZ[j]=a[i][m+1];
for(k=j+1;k<=m;++k)
{
REZ[j] = REZ[j] - a[i][k] * REZ[k];
}
break;
}
return 1;
}
void citire()
{
scanf("%d %d",&n,&m);
for(int i=1;i<=n;++i)
for(int j=1;j<=m+1;++j)
scanf("%lf",&a[i][j]);
}
int main()
{
freopen("gauss.in","r",stdin);
freopen("gauss.out","w",stdout);
citire();
if ( solve_gauss() )
for(int i=1;i<=m;++i)printf("%.8lf ",REZ[i]);
else printf("Imposibil\n");
return 0;
}