Cod sursa(job #1232772)

Utilizator CostanMiriamCostan Miriam CostanMiriam Data 23 septembrie 2014 21:23:40
Problema Algoritmul lui Gauss Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <fstream>
#include <iomanip>

using namespace std;

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

double a[310][310],x[310];
int n,m,i,j,k,l,aux;

double modul (double x) {
    return (x>0?x:-x);
}

int main () {

    fin>>n>>m;
    for (i=1;i<=n;i++)
        for (j=1;j<=m+1;j++)
            fin>>a[i][j];
    i=1;j=1;
    while (i<=n && j<=m){
        for (k=i;k<=n;k++)
            if (modul(a[k][i])>=0.00000001)
                break;
        if (k==n+1) {
            j++;
            continue;
        }
        if (k!=i)
            for (l=j;l<=m+1;l++){
                aux=a[k][l];
                a[k][l]=a[i][l];
                a[i][l]=aux;
            }
        for (l=j+1;l<=m+1;l++)
            a[i][l]/=a[i][j];
        a[i][j]=1;
        for (k=i+1;k<=n;k++){
            for(l =j+1;l<=m+1;l++)
                a[k][l]-=a[k][j]*a[i][l];
            a[k][j]=0;
        }
        i++;j++;
    }

    for (i=n;i>=1;i--) {
        for (j=1;j<=m+1;j++)
            if (modul(a[i][j])>0.0000001)
                break;
        if (j==m+1) {
            fout<<"Imposibil\n";
            return 0;
        }
        x[j]=a[i][m+1];
        for (k=j+1;k<=m;k++)
            x[j]-=a[i][k]*x[k];
    }
    fout<<setprecision(8) <<fixed;
    for (i=1;i<=n;i++)
        fout<<x[i]<<" ";
    return 0;
}