Cod sursa(job #2090277)

Utilizator Liviu_Ionut_MoantaMoanta Ionut Liviu Liviu_Ionut_Moanta Data 17 decembrie 2017 20:34:21
Problema Algoritmul lui Gauss Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.51 kb
#include<fstream>
#include<iomanip>
#define ok 0.0000001
using namespace std;
ifstream fin("gauss.in");
ofstream fout("gauss.out");
int n,m,i,j,o,k,q;
double aux,sol[305],v[305][305];
int main(){
    fin>>n>>m;
    for(i=1;i<=n;i++){
        for(j=1;j<=m+1;j++){
            fin>>v[i][j];
        }
    }
    i=1;
    j=1;
    while(i<=n&&j<=m){
        for(o=i;o<=n;o++){
            if(v[o][j]!=0){
                break;
            }
        }
        if(o==n+1){
            j++;
            continue;
        }
        if(o!=i){
            for(k=1;k<=m+1;k++){
                aux=v[i][k];
                v[i][k]=v[o][k];
                v[o][k]=aux;
            }
        }
        for(o=j+1;o<=m+1;o++){
            v[i][o]/=v[i][j];
        }
        v[i][j]=1;
        for(o=i+1;o<=n;o++){
            for(k=j+1;k<=m+1;k++){
                v[o][k]-=v[i][k]*v[o][j];
            }
            v[o][j]=0;
        }
        i++;
        j++;
    }
    for(i=n;i>=1;i--){
        for(j=1;j<=m+1;j++)
            if(v[i][j]<-ok || v[i][j]>ok){
                break;
            }
        if(j==m+2){
            continue;
        }
        if(j==m+1){
            q=-1;
            break;
        }
        sol[j]=v[i][m+1];
        for(k=j+1;k<=m;k++){
            sol[j]-=sol[k]*v[i][k];
        }
    }
    if(q==-1){
        fout<<"Imposibil";
        return 0;
    }
    for(i=1;i<=m;i++){
        fout<<setprecision(9)<<fixed<<sol[i]<<" ";
    }
    return 0;
}