Pagini recente » Cod sursa (job #788010) | Cod sursa (job #1444431) | Cod sursa (job #1864688) | Cod sursa (job #2838830) | Cod sursa (job #2487293)
#include<fstream>
#include<iomanip>
///#define constanta 0.001
using namespace std;
ifstream fin("gauss.in");
ofstream fout("gauss.out");
int n,m,i,j,k,aux,ok;
double solutii[305],a[305][305];
int main(){
fin>>n>>m;
for(i=1;i<=n;i++){
for(j=1;j<=m+1;j++)
fin>>a[i][j];
}
i=j=1;
while(i<=n && j<=m){
///cautam un element nenul pe coloana la care suntem
for(k=i;k<=n;k++)
if(a[k][j]!=0)
break;
if(k==n+1){
j++;
continue;
}
if(k!=i){
for(int h=1;h<=m+1;h++){
aux=a[k][h];
a[k][h]=a[i][h];
a[i][h]=aux;
}
}
/// acum avem sigur un element nenul( a[i][j] )
/// impartim toata ecuatia la el nenul
/// pt a simplifica calculul
for(int h=j+1;h<=m+1;h++)
a[i][h]/=a[i][j];
a[i][j]=1;
for(k=i+1;k<=n;k++){
for(int h=j+1;h<=m+1;h++)
a[k][h]-=a[i][h]*a[k][j];
a[k][j]=0;
}
i++;
j++;
}
///rezolvam fiecare ecuatie pe rand
///(invers)
for(i=n;i>=1;i--){
for(j=1;j<=m+1;j++){
///if(a[i][j]>constanta || a[i][j]<-constanta)
if(a[i][j])
break;
}
if(j==m+1){
ok=1;
break;
}
if(j==m+2)
continue;
for(k=j+1;k<=m;k++)
solutii[j]-=solutii[k]*a[i][k];
solutii[j]+=a[i][m+1];
}
if(ok==1)
fout<<"Imposibil";
else{
for(i=1;i<=m;i++)
fout<<setprecision(10)<<fixed<<solutii[i]<<" ";
}
return 0;
}