Cod sursa(job #2087513)

Utilizator RaduMirceaAndreiRadu Mircea Andrei RaduMirceaAndrei Data 13 decembrie 2017 19:19:57
Problema Algoritmul lui Gauss Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
# include <fstream>
# include <iomanip>
using namespace std;
ifstream fin("gauss.in");
ofstream fout("gauss.out");
int n,m,i,j,k,t,poz;
double a[305][305],val[305],el;
int main () {
    fin>>n>>m;
    for(i=1;i<=m;i++,j++)
        for(j=1;j<=n+1;j++)
            fin>>a[i][j];
    for(i=1,j=1;i<=m,j<=n;i++,j++){
        if(a[i][j]==0)
            for(t=i+1;t<=m;t++)
                if(a[t][j]!=0)
                    for(k=j;k<=n+1;k++)
                        swap(a[i][k],a[t][k]);
        if(a[i][j]==0){
            i--;
            continue;
        }
        for(k=j+1;k<=n+1;k++)
            a[i][k]/=a[i][j];
        a[i][j]=1;
        for(t=i+1;t<=m;t++)
            for(k=n+1;k>=j;k--)
                a[t][k]-=a[i][k]*a[t][j];
    }
    for(i=m;i>=1;i--){
        for(j=1;j<=n+1;j++)
            if(a[i][j]){
                poz=j;
                break;
            }
        if(poz==n+1){
            fout<<"Imposibil";
            return 0;
        }
        el=0;
        for(j=poz+1;j<=n;j++)
            el+=a[i][j]*val[j];
        val[poz]=(a[i][n+1]-el)/a[i][poz];
    }
    for(i=1;i<=n;i++)
        fout<<setprecision(10)<<fixed<<val[i]<<" ";
    fout<<"\n";
    return 0;
}