Cod sursa(job #1151431)

Utilizator assa98Andrei Stanciu assa98 Data 24 martie 2014 09:39:52
Problema Algoritmul lui Gauss Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <fstream>
#include <algorithm>
#include <iomanip>
using namespace std;

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

const int MAX_N=310;

double a[MAX_N][MAX_N];
double val[MAX_N];
int n,m;

void schimba(double a[MAX_N],double b[MAX_N]) {
    for(int i=1;i<=m+1;i++) {
        swap(a[i],b[i]);
    }
}

void redu(double a[MAX_N],double b[MAX_N],double c) {
    for(int i=1;i<=m+1;i++) {
        a[i]+=c*b[i];
    }
}

int main() {
    fout<<setprecision(10)<<fixed;
    fin>>n>>m;
    for(int i=1;i<=n;i++) {
        for(int j=1;j<=m+1;j++) {
            fin>>a[i][j];
        }
    }
    
    int p=1;
    for(int j=1;j<=m;j++) {
        if(p==n+1) {
            val[j]=0;
            continue;
        }
        if(!a[p][j]) {
            for(int i=p+1;i<=n;i++) {
                if(a[i][j]) {
                    schimba(a[i],a[p]);
                    break;
                }
            }
            if(!a[p][j]) {
                val[j]=0.0;
                continue;
            }
        }
        for(int i=1;i<=n;i++) {
            if(i==p) {
                continue;
            }
            redu(a[i],a[p],-(a[i][j]/a[p][j]));
        }
        p++;
    }

    p=1;
    for(int j=1;j<=m;j++) {
        if(a[p][j]) {
            val[j]=a[p][m+1]/a[p][j];
            p++;
        }
        fout<<val[j]<<' ';
    }
    return 0;
}