Pagini recente » Cod sursa (job #607530) | Cod sursa (job #1639856) | Istoria paginii utilizator/imbuzanradu | Cod sursa (job #2715364) | Cod sursa (job #1390969)
#include<cstdio>
const int N=300;
const double eps=0.0001;
double a[N+1][N+1];
double res[N+1];
int n,m;
double abs(double x){
if(x>0)
return x;
return-x;
}
bool zero(double x){
return abs(x)<=eps;
}
void swp(double&x,double&y){
double aux=x;
x=y;
y=aux;
}
int main(){
freopen("gauss.in","r",stdin);
freopen("gauss.out","w",stdout);
scanf("%d%d",&n,&m);
m++;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%lf",&a[i][j]);
int i=1,j=1;
while(i<=n&&j<m){
int k;
for(k=i;k<=n;k++)
if(!zero(a[k][j]))
break;
if(k==n+1){
j++;
break;
}
for(int l=1;l<=m;l++)
swp(a[i][l],a[k][l]);
for(int l=j+1;l<=m;l++)
a[i][l]/=a[i][j];
a[i][j]=1;
for(int i1=i+1;i1<=n;i1++){
for(int j1=j+1;j1<=m;j1++)
a[i1][j1]-=a[i][j1]*a[i1][j];
a[i1][j]=0;
}
i++;
j++;
}
for(i=n;i>=1;i--)
for(int j=1;j<=m;j++)
if(!zero(a[i][j])){
if(j==m){
printf("Imposibil");
return 0;
}
res[j]=a[i][m];
for(int k=j+1;k<m;k++)
res[j]-=res[k]*a[i][k];
break;
}
for(int i=1;i<m;i++)
printf("%.8lf ",res[i]);
return 0;
}