Pagini recente » Cod sursa (job #3245165) | Cod sursa (job #1428267) | Cod sursa (job #2928773) | Cod sursa (job #255167) | Cod sursa (job #718561)
Cod sursa(job #718561)
#include<cstdio>
#include<algorithm>
#define dim 309
#define err 0.00000001
double sol[dim],A[dim][dim];
int n,m;
using namespace std;
void gauss(){
int i , j;
i = j = 1 ;
while( i <= n && j <= m){
int k;
for(k=i;k<=n;k++)
if(A[k][j]<-err || A[k][j]>err)
break;
if(k==n+1){
++j;
continue;
}
if(k!=i){
for(int y = 1; y <= m+1; ++y ){
swap(A[i][y],A[k][y]);
}
}
for(int y=j+1 ; y <= m+1 ;++y )
A[i][y]=A[i][y]/A[i][j];
A[i][j]=1;
for(int x = i+1 ; x<= n; ++x){
for(int y=j+1 ;y<=m+1 ;++y){
A[x][y]-=A[x][j]*A[i][y];
}
A[x][j]=0;
}
++i;
++j;
}
}
int main (){
freopen("gauss.in","r",stdin);
freopen("gauss.out","w",stdout);
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]);
gauss();
for(int i=n;i>=1;--i){
for(int j=1;j<=m+1;j++){
if(A[i][j]<-err || A[i][j]>err){
if(j==m+1){
printf("Imposibil\n");
return 0;
}
sol[j]=A[i][m+1];
for(int k = j+1; k <= m; ++k)
sol[j] -= sol[k]*A[i][k];
break;
}
}
}
for(int i=1;i<=m;i++)
printf("%.8lf ",sol[i]);
return 0;
}