Cod sursa(job #1002224)

Utilizator dutzulBodnariuc Dan Alexandru dutzul Data 27 septembrie 2013 03:39:00
Problema Algoritmul lui Gauss Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.48 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("gauss.in");
ofstream g ("gauss.out");

#define eps 0.0000001
#define db double
#define LE 106
#include <iomanip>

db a[LE][LE];
int linie,i,j,t,n,m;
int _left[LE];
db rez[LE];

int main()
{
    f>>n>>m;
    g<<fixed;
    g<<setprecision(10);

    for(i=1; i<=n; ++i)
        for(j=1; j<=m+1; ++j)
        {
            f>>a[i][j];
            if (a[i][j]&&_left[i]==0) _left[i]=j;
        }

    linie=1;

    for(i=1; i<=m; ++i)
    {
        bool okz=false;


        for(j=linie; j<=n&&okz==false; ++j)
          if (a[linie][i]<=-eps||a[linie][i]>=eps)
            {
                for(t=1; t<=m+1; ++t) swap(a[linie][t],a[j][t]);
                ++linie;
                okz=true;
                break;
            }

        if (okz==false) continue;

        for(j=linie; j<=n; ++j)
        {
            db coef=a[j][i]/a[linie-1][i];

            for(t=1; t<=m+1; ++t)
                a[j][t]-=coef*a[linie-1][t];
        }
    }

    for(i=linie-1; i>0; --i)
    {
        for(j=1; j<=m+1; ++j)
            if (a[i][j]<=-eps||a[i][j]>=eps)
            {
                if (j==m+1)
                {
                    g<<"Imposibil"<<'\n';
                    return 0;
                }
                rez[j]=a[i][m+1]/a[i][j];
                for(t=j-1; t>0; --t) a[t][m+1]-=rez[j]*a[t][j];
                break;
            }
    }

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


    f.close();
    g.close();
    return 0;
}