Cod sursa(job #1383318)

Utilizator retrogradLucian Bicsi retrograd Data 10 martie 2015 09:22:54
Problema Algoritmul lui Gauss Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.99 kb
#include<fstream>
#include<iomanip>
#include<cmath>

using namespace std;
typedef int var;

ifstream fin("gauss.in");
ofstream fout("gauss.out");

#define MAXN 501

double A[MAXN][MAXN], B[MAXN][MAXN];
double SOL[MAXN];
var n, m;

bool diagonalizare() {
    for(var step=1; step<=n; step++) {
        if(A[step][step] == 0) {
            var j;
            for(j=step+1; j<=n; j++)
                if(A[j][step]) {
                    for(var k=step; k<=m+1; k++) {
                        A[step][k] += A[j][k];
                    }
                    break;
                }
            if(A[step][step] == 0)
                continue;
        }

        //Acum A[step][step] != 0

        double aux = A[step][step];
        for(var j=step; j<=m+1; j++) {
            A[step][j] /= aux;
        }

        for(var j=step+1; j<=n; j++) {
            if(A[j][step] == 0) continue;
            double aux = A[j][step];
            for(var k=step; k<=m+1; k++) {
                A[j][k] = A[j][k] / aux - A[step][k];
            }
        }
    }
    return true;
}

int main() {
    fin>>n>>m;
    for(var i=1; i<=n;i++) {
        for(var j=1; j<=m+1; j++) {
            fin>>A[i][j];
            B[i][j] = A[i][j];
        }
    }

    diagonalizare();
/*
    for(var i=1; i<=n; i++) {
        for(var j=1; j<=m+1; j++) {
            fout<<A[i][j]<<" ";
        }
        fout<<'\n';
    }
*/
    double rez;
    for(var i=n; i>=1; i--) {
        rez = A[i][m+1];
        for(var j=n; j>i; j--) {
            rez -= SOL[j]*A[i][j];
        }
        SOL[i] = rez;
    }

    fout<<fixed<<setprecision(12);

    for(var i=1; i<=n; i++) {
        double rez = 0;
        for(var j=1; j<=m; j++) {
            rez += SOL[j]*B[i][j];
        }
        if(abs(rez - B[i][m+1]) > 1e-12) {
            fout<<"Imposibil";
            return 0;
        }
    }

    for(var i=1; i<=m; i++) {
        fout<<SOL[i]<<" ";
    }




    return 0;
}