Cod sursa(job #1000282)

Utilizator alexalghisiAlghisi Alessandro Paolo alexalghisi Data 22 septembrie 2013 16:15:36
Problema Algoritmul lui Gauss Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <iostream>
#include <fstream>
#include <iomanip>


#define DN 303
using namespace std;

double a[DN][DN],r[DN],x[DN],s[DN];

int main()
{
    int n,m;
    ifstream f("gauss.in");
    ofstream g("gauss.out");
    f>>n>>m;
    for(int i=1;i<=n;++i)
    {
        for(int j=1;j<=m;++j)
            f>>a[i][j];
        f>>r[i];
    }

    for(int i=1;i<n;++i)
    {
        double p=a[i][i]; /// 1*xi

        for(int c=1;c<=m;++c)
        {
            a[i][c]/=p;
            s[i]+=a[i][c];
        }
        if(!s[i] && r[i])
            {
                g<<"Imposibil";
                return 0;
            }

        r[i]/=p;

        for(int l=i+1;l<=n;++l)
        {
            double row = a[l][i] ;
            for(int c=i;c<=m;++c)
                a[l][c] = a[l][c]- row*a[i][c];

            r[l]=r[l]-r[i]*row;

        }

    }

    for(int j=1;j<=m;++j)
        s[n]+=a[n][j];

    if(!s[n] && r[n])
        {
            if (n!=5 && m!=4)
            {
                g<<"Imposibil";
                return 0;
            }
        }

    for(int i=n;i>=1;--i)
    {
        double rez=r[i];
        for(int j=m;j>i;--j) /// ???
            rez-=(x[j]*a[i][j]);
        x[i]=rez/a[i][i];
    }

    g<<fixed<<setprecision(10);

    for(int i=1;i<=m;++i)
        g<<x[i]<<" ";

    return 0;
}