Cod sursa(job #2086215)

Utilizator RaduXD1Nicolae Radu RaduXD1 Data 11 decembrie 2017 17:43:09
Problema Algoritmul lui Gauss Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.47 kb
#include <fstream>
#include <iomanip>
#define ver 0.000000001

using namespace std;
ifstream fin("gauss.in");
ofstream fout("gauss.out");
int n,m,i,j,x,y,t,ok;
double a[305][305], sol[305],aux;


int main()
{
    fin>>n>>m;
    for(i=1;i<=n;i++)
        for(j=1;j<=m+1;j++)
            fin>>a[i][j];
    x=1;y=1;
    while(x<=n&&y<=m)
    {
        for(i=x;i<=n;i++)
            if(a[i][y]!=0)
                break;
        if(i==n+1)
        {
            y++;
            continue;
        }
        if(i!=x)
            for(j=1;j<=m+1;j++)
            {
                aux=a[x][j];
                a[x][j]=a[i][j];
                a[i][j]=aux;
            }
        for(j=y+1;j<=m+1;j++)
            a[x][j]/=a[x][y];
        a[x][y]=1;
        for(i=x+1;i<=n;i++)
        {
            for(j=y+1;j<=m+1;j++)
                a[i][j]-=a[x][j]*a[i][y];
            a[i][y]=0;
        }
        x++;y++;
    }
    for(i=n;i>=1;i--)
    {
        for(j=1;j<=m+1;j++)
            if(a[i][j]<-ver||a[i][j]>ver)
                break;
        if(j==m+2)
            continue;
        if(j==m+1)
        {
            ok=-1;
            break;
        }
        sol[j]=a[i][m+1];
        for(t=j+1;t<=m;t++)
            sol[j]-=sol[t]*a[i][t];
    }
    if(ok==-1)
        fout<<"Imposibil";
    else
        for(i=1;i<=m;i++)
            fout<<setprecision(10)<<fixed<<sol[i]<<" ";
    fin.close();
    fout.close();
    return 0;
}