Cod sursa(job #2461394)

Utilizator Laura_CorneiLaura Maria Cornei Laura_Cornei Data 25 septembrie 2019 16:52:58
Problema Algoritmul lui Gauss Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <bits/stdc++.h>
#define ld long double
using namespace std;
ld a[1005][1005], ans[1005];
int n, m;
int zero(ld x){
    return ((x>=-1e-10)&&(x<=1e-10));
}
int main()
{
    freopen("gauss.in" , "r", stdin);
    freopen("gauss.out", "w", stdout);
    int i,j, lin;
    cin>>n>>m;
    for(i=1; i<=n; i++)
        for(j=1; j<=m+1; j++)
            cin>>a[i][j];
    i=1; j=1;
    for(;j<=m; ){

        lin=0;
        for(int k=i; k<=n; k++)
           if(!zero(a[k][j])) {lin=k;break;}
        if(lin==0) {j++;continue;}

        for(int k=j; k<=m+1; k++){
            ld aux=a[i][k];
            a[i][k]=a[lin][k];
            a[lin][k]=aux;
        }
        for(int k=j+1; k<=m+1; k++)
            a[i][k]=a[i][k]/a[i][j];
        a[i][j]=1;
        for(int l=i+1; l<=n; l++){
            for(int k=j+1; k<=m+1; k++)
                 a[l][k]-=a[i][k]*a[l][j];
            a[l][j]=0;
        }

        i++; j++;
    }
    for(i=n; i>=1; i--){
        for(j=1; j<=m; j++)
           if(!zero(a[i][j])){
             ans[j]=a[i][m+1];
             for(int k=j+1; k<=m; k++)
                    ans[j]-=ans[k]*a[i][k];
             break;
        }
        if((j==m+1)&&(!zero(a[i][m+1]))) {cout<<"Imposibil"; return 0;}
    }
    for(i=1; i<=m; i++) cout<<fixed<<setprecision(10)<<ans[i]<<' ';
    return 0;
}