Cod sursa(job #1614899)

Utilizator Athena99Anghel Anca Athena99 Data 26 februarie 2016 11:46:24
Problema Algoritmul lui Gauss Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.54 kb
#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;
}