Pagini recente » Cod sursa (job #1997133) | Cod sursa (job #2883498) | Cod sursa (job #1636284) | Cod sursa (job #3138992) | Cod sursa (job #1614899)
#include <fstream>
#include <iomanip>
using namespace std;
ifstream fin("gauss.in");
ofstream fout("gauss.out");
const int nmax= 300;
const int out_precision= 10;
int n, m;
double a[nmax+1][nmax+2], aux[nmax+1][nmax+2];
void gauss( ) {
for ( int i= 1; i<=n; ++i ) {
for ( int j= i+1; j<=n; ++j ) {
if ( a[j][i]!=0 ) {
double x= a[j][i];
for ( int k= i; k<=m+1; ++k ) {
a[j][k]= a[j][k]*a[i][i]-a[i][k]*x;
}
}
}
}
}
int main( ) {
fin>>n>>m;
for ( int i= 1; i<=n; ++i ) {
for ( int j= 1; j<=m+1; ++j ) {
fin>>a[i][j];
}
}
gauss();
for ( int i= 1; i<=n; ++i ) {
for ( int j= 1; j<=m; ++j ) {
aux[i][j]= a[n-i+1][m-j+1];
}
}
for ( int i= 1; i<=n; ++i ) {
aux[i][m+1]= a[n-i+1][m+1];
}
for ( int i= 1; i<=n; ++i ) {
for ( int j= 1; j<=m+1; ++j ) {
a[i][j]= aux[i][j];
}
}
gauss();
fout<<setprecision(out_precision)<<fixed;
bool ok= 1;
for ( int i= n; i>=1 && ok==1; --i ) {
if ( a[i][m+1]!=0 && a[i][i]==0 ) {
ok= 0;
}
}
if ( ok==0 ) {
fout<<"Imposibil\n";
} else {
for ( int i= n; i>=1; --i ) {
if ( a[i][i]==0 ) {
fout<<0<<" ";
} else {
fout<<(double)a[i][m+1]/a[i][i]<<" ";
}
}
}
return 0;
}