Cod sursa(job #1384718)

Utilizator Adrian1997Radulescu Adrian Adrian1997 Data 11 martie 2015 12:52:41
Problema Algoritmul lui Gauss Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <fstream>
#include <iomanip>
#define DIM 311
#define mod 0.00000001
using namespace std;
ifstream f("gauss.in");
ofstream g("gauss.out");
int n,m;
double A[DIM][DIM],v[DIM];

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

    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){
        k=i;
        while(!A[k][j] && k<=n)
            k++;
        if(k==n+1){
            j++;
            continue;
        }
        if(k!=i)
            for(t=j;t<=m+1;t++) swap(A[i][t],A[k][t]);

        for(k=j+1;k<=m+1;k++)
            A[i][k]/=A[i][j];
        A[i][j]=1;

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

    for(i=n;i>0;i--){
        j=1;
        while(A[i][j]<=mod && A[i][j]>=-mod)
            j++;
        if(j==m+2)
            continue;
        if(j==m+1){
            g<<"Imposibil";
            break;
        }
        v[j]=A[i][m+1];
        for(k=j+1;k<=m;k++)
            v[j]-=A[i][k]*v[k];
    }

    for(i=1;i<=m;i++){
        g<<setprecision(8)<<fixed<<v[i]<<" ";
    }
    f.close();
    g.close();
    return 0;
}