Pagini recente » Cod sursa (job #2317859) | Cod sursa (job #411505) | Cod sursa (job #101820) | Cod sursa (job #2333159) | Cod sursa (job #2461396)
#include <bits/stdc++.h>
#define ld long double
using namespace std;
ld a[1005][1005], ans[1005];
int n, m;
int zero(ld x){
return ((x>=-1e-11)&&(x<=1e-11));
}
int main()
{
freopen("gauss.in" , "r", stdin);
freopen("gauss.out", "w", stdout);
int i,j, lin;
cin>>n>>m;
for(i=1; i<=n; i++)
for(j=1; j<=m+1; j++)
cin>>a[i][j];
i=1; j=1;
for(;j<=m; ){
lin=0;
for(int k=i; k<=n; k++)
if(!zero(a[k][j])) {lin=k;break;}
if(lin==0) {j++;continue;}
if(i!=lin)
for(int k=j; k<=m+1; k++){
ld aux=a[i][k];
a[i][k]=a[lin][k];
a[lin][k]=aux;
}
for(int k=j+1; k<=m+1; k++)
a[i][k]=a[i][k]/a[i][j];
a[i][j]=1;
for(int l=i+1; l<=n; l++){
for(int k=j+1; k<=m+1; k++)
a[l][k]-=a[i][k]*a[l][j];
a[l][j]=0;
}
i++; j++;
}
for(i=n; i>=1; i--){
for(j=1; j<=m; j++)
if(!zero(a[i][j])){
ans[j]=a[i][m+1];
for(int k=j+1; k<=m; k++)
ans[j]-=ans[k]*a[i][k];
break;
}
if((j==m+1)&&(!zero(a[i][m+1]))) {cout<<"Imposibil"; return 0;}
}
for(i=1; i<=m; i++) cout<<fixed<<setprecision(10)<<ans[i]<<' ';
return 0;
}