Cod sursa(job #1220881)

Utilizator Adrian1997Radulescu Adrian Adrian1997 Data 18 august 2014 20:18:37
Problema Algoritmul lui Gauss Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include <fstream>
#include <iomanip>
#define DIM 310
#define LIM 0.0000000001
using namespace std;
ifstream f("gauss.in");
ofstream g("gauss.out");
int n,m,sol;

double A[DIM][DIM];
double X[DIM],aux;

int main(void){
    register int i,j,t,k;

    f>>n>>m;
    for(i=1;i<=n;i++)
        for(j=1;j<=m+1;j++)
            f>>A[i][j];

    i=1,j=1;
    while(i<=n && j<=m){
        for(k=i;k<=n;k++)
            if(A[k][j])
                break;
        if(k==n+1){
            j++;
            continue;
        }

        if(k!=i){
            for(t=1;t<=m+1;t++)
                aux=A[k][t],A[k][t]=A[i][t],A[i][t]=aux;
        }
        for(t=j+1;t<=m+1;t++) A[i][t]/=A[i][j];
        A[i][j]=1;

        for(k=i+1;k<=n;k++){
            for(t=j+1;t<=m+1;t++)
                A[k][t]-=A[i][t]*A[k][j];
            A[k][j]=0;
        }
        i++,j++;
    }

    for(i=n;i>0;i--){
        for(j=1;j<=m+1;j++)
            if(A[i][j] < -LIM || A[i][j] > LIM)
                break;
        if(j==m+2) continue;
        if(j==m+1){
            sol=-1;
            break;
        }
        X[j]=A[i][m+1];
        for(k=j+1;k<=m;k++)
            X[j]-=X[k]*A[i][k];
    }

    if(sol==-1)
        g<<"imposibil";
    else
        for(i=1;i<=m;i++)
            g<<setprecision(10)<<fixed<<X[i]<<" ";
    f.close();
    g.close();
    return 0;
}