Cod sursa(job #2679543)

Utilizator alexdumitrescuDumitrescu George Alex alexdumitrescu Data 30 noiembrie 2020 19:22:56
Problema Algoritmul lui Gauss Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <bits/stdc++.h>
#define eps 0.0000000001
#define Nmax 305
using namespace std;
ifstream fin ("gauss.in");
ofstream fout ("gauss.out");;
double a[Nmax][Nmax], sol[Nmax];
int n, m;
int main()
{
    fin >> n >> m;
    m++;

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

    int l=1, c=1, i, j;
    while(l<=n && c<m)
    {
        for(i=l;i<=n;i++)
            if(abs(a[i][c])>eps)
                break;

        if(i==n+1)
        {
            c++;
            continue;
        }

        if(i!=l)
            for(j=c;j<=m;j++)
                swap(a[l][j], a[i][j]);

        for(j=c+1;j<=m;j++)
            a[l][j]/=a[l][c];
        a[l][c]=1;

        for(i=l+1;i<=n;i++)
        {
            for(j=c+1;j<=m;j++)
                a[i][j]-=a[l][j]*a[i][c];
            a[i][c]=0;
        }

        l++, c++;
    }

    for(i=n;i>=1;i--)
    {
        for(j=1;j<=m;j++)
            if(abs(a[i][j])>eps)
                break;
        if(j==m)
        {
            fout << "Imposibil";
            return 0;
        }
        sol[j]=a[i][m];
        for(int k=j+1;k<m;k++)
            sol[j]-=sol[k]*a[i][k];

    }
    for(int i=1;i<m;i++)
        fout << setprecision(10) << fixed << sol[i] << ' ';
    return 0;
}