Cod sursa(job #2784226)

Utilizator eduardmirceabraguta eduard eduardmircea Data 16 octombrie 2021 09:05:04
Problema Algoritmul lui Gauss Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.41 kb
//#include <iostream>

#include <fstream>

#include <iomanip>
using namespace std;
long double a[305][305],ans[605];
const long double tol=1e-5;
int p[505],n,m,j;
long double fabs (long double x)
{
    if(x<(long double)(0))return -x;
    return x;
}
ifstream in ("gauss.in");
ofstream out ("gauss.out");
int main()
{

    in>>n>>m;
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m+1; j++)
        {
            in>>a[i][j];
        }
    }

    for(int i=1; i<=n; i++)
    {
        for( j=1; j<=m+1; j++)
        {

            if(fabs(a[i][j])>tol  )break;

        }
        if(j==m+2)continue;
        if(j==m+1)
        {
            out<<"Imposibil";
            return 0;
        }
        else
        {

            p[i]=j;

            for(j=1; j<=n; j++)
            {
                if(i!=j&& fabs( a[j][p[i]] )>tol  )
                {
                    long double factor;
                    factor = a[j][ p[i] ] / a[i][ p[i] ];
                    for(int k=1; k<=m+1; k++)
                    {
                        a[j][k] -= factor * a[i][k];
                    }
                }
            }
        }
    }

    for(int i=1; i<=n; i++)
    {
        if(p[i])
            ans[ p[i] ]=a[i][m+1]/a[i][p[i]];

    }
    for(int i=1; i<=m; i++)
    {
        out<<setprecision(10)<<fixed<<ans[i]<<" ";
    }


    return 0;
}