Cod sursa(job #1657457)

Utilizator RaTonAndrei Raton RaTon Data 20 martie 2016 15:09:23
Problema Algoritmul lui Gauss Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.48 kb
#include <fstream>
#include <algorithm>
#include <iomanip>
using namespace std;
ifstream f("gauss.in");
ofstream g("gauss.out");
int n, m;

double A[301][302], X[301];

bool egal( double x, double y ){
    return x - 1e-8 <= y && y <= x + 1e-8;
}

int main()
{
    int i, j, k, p, l, c;
    f >> n >> m;
    for( i = 1; i <= n; i++  ){
        for( j = 1; j <= m + 1; j++ )
            f >> A[i][j];
    }
    i = j = 1;
    while( i <= n && j <= m ){
        k = i;
        while( A[k][j] == 0.0 && k <= n )
            k++;
        if( k <= n ){
            if( k != i )
                for( p = 1; p <= m + 1; p++ )
                    swap(A[i][p],A[k][p]);
            for( p = m + 1; p >= j; p-- )
                A[i][p] /= A[i][j];

            for( l = i + 1; l <= n; l++ ){
                for( c = j + 1; c <= m + 1; c++ )
                    A[l][c] -= A[i][c] * A[l][j];
                A[l][j] = 0.0;
            }
            i++;
            j++;
        }
        else
            j++;
    }

    for( i = n; i >= 1; i-- ){
        j = i;
        while( egal(A[i][j],0.0) && j <= m + 1 )
            j++;
        if( j == m + 1 ){
            g << "Imposibil\n";
            return 0;
        }
        else{
            X[j] = A[i][m+1];
            for( k = m; k > j; k-- )
                 X[j] -= X[k] * A[i][k];
        }
    }

    for( i = 1; i <= m; i++ )
        g << setprecision(8) << fixed << X[i] << " ";
    return 0;
}