Cod sursa(job #1383805)

Utilizator retrogradLucian Bicsi retrograd Data 10 martie 2015 17:47:37
Problema Algoritmul lui Gauss Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.96 kb
#include<fstream>
#include<iomanip>

using namespace std;
typedef int var;

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

#define MAXN 301
#define eps 0.000001

float A[MAXN][MAXN], SOL[MAXN];
var n, m;

inline float abs(float d) {
    return max(d, -d);
}

void diag() {
    for(var step=1; step<=n; step++) {
        if(abs(A[step][step]) < eps) {
            for(var j=step+1; j<=n; j++) {
                if(abs(A[j][step]) > eps) {
                    for(var k=step; k<=m+1; k++) {
                        A[step][k] += A[j][k];
                    }
                    break;
                }
            }
            if(abs(A[step][step]) < eps)
                continue;
        }
        float aux = A[step][step];
        for(var k=step; k<=m+1; k++) {
            A[step][k] /= aux;
        }
        for(var i=step+1; i<=n; i++) {
            if(abs(A[i][step]) < eps)
                continue;
            float aux = A[i][step];
            for(var k=step; k<=m+1; k++) {
                A[i][k] /= aux;
                A[i][k] -= A[step][k];
            }
        }
    }
}

int main() {
    fin>>n>>m;
    for(var i=1; i<=n; i++) {
        for(var j=1; j<=m+1; j++) {
            fin>>A[i][j];
        }
    }
    diag();
/*
    for(var i=1; i<=n; i++) {
        for(var j=1; j<=m+1; j++) {
            fout<<A[i][j]<<" ";
        }
        fout<<endl;
    }
*/
    for(var i=n; i>=1; i--) {
        float rez = A[i][m+1];
        for(var j=n; j>i; j--) {
            rez -= A[i][j]*SOL[j];
        }
        SOL[i] = rez;
    }

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

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



    return 0;
}