Cod sursa(job #2307606)

Utilizator NToniBoSSNicolae Tonitza NToniBoSS Data 25 decembrie 2018 00:58:02
Problema Algoritmul lui Gauss Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.44 kb
#include <bits/stdc++.h>
#define EPS 0.000000001
/// TONI BO$$ was here
/// #MLC

using namespace std;
double a[302][302];
double rez[302];
int main()
{
    int n,m,i,j,k,t;
    freopen("gauss.in","r",stdin);
    freopen("gauss.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(i=1; i<=n; i++)
        for(j=1; j<=m+1; j++)
            scanf("%lf",&a[i][j]);
    for(i=1,j=1; i<=n && j<=m; i++,j++){
        for(k=i; k<=n; k++)
            if(a[i][j]>EPS || a[i][j]<-EPS)
                break;
        if(k==n+1){
            i--;
            continue ;
        }
        for(t=j+1; t<=m+1; t++)
            a[k][t]/=a[k][j];
        a[k][j]=1;
        for(t=1; t<=m+1; t++)
        {
            double aux=a[i][t];
            a[i][t]=a[k][t];
            a[k][t]=aux;
        }
        for(k=i+1; k<=n; k++)
        {
            for(t=j+1; t<=m+1; t++)
                a[k][t]-=(a[k][j]/a[i][j])*a[i][t];
            a[k][j]=0;
        }
    }
    for(i=n; i>0; i--)
        for(j=1; j<=m+1; j++)
            if(a[i][j]>EPS || a[i][j]<-EPS)
            {
                if(j==m+1)
                {
                    printf("Imposibil");
                    exit(0);
                }
                rez[j]=a[i][m+1];
                for(k=i+1; k<=n; k++)
                    rez[j]-=rez[k];
                break;
            }
    for(i=1; i<=m; i++)
        printf("%.8lf ",rez[i]);

    return 0;
}