Cod sursa(job #1401364)

Utilizator hevelebalazshevele balazs hevelebalazs Data 25 martie 2015 20:18:29
Problema Algoritmul lui Gauss Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.06 kb
#include <stdio.h>
#define fr(i,a,b) for(i=a;i<b;++i)
#define rf(i,a,b) for(i=b-1;i>=a;--i)
#define N 300
#define e 0.0000001
double a[N][N+1];
double x[N];
int main(){
    freopen("gauss.in","r",stdin);
    freopen("gauss.out","w",stdout);
    int n,m,i,j,k,l,o;
    scanf("%i%i",&n,&m);
    fr(i,0,n)fr(j,0,m+1)scanf("%lf",a[i]+j);
    j=0;
    fr(i,0,n){
        fr(k,i,n)if(a[k][j]<-e||a[k][j]>e)break;
        if(k==n){++j;continue;}
        if(k!=i){
            fr(l,0,m+1){
                double x=a[i][l];
                a[i][l]=a[k][l];
                a[k][l]=x;
                }
            }
        fr(l,j+1,m+1)a[i][l]/=a[i][j];a[i][j]=1.0;
        fr(o,i+1,n){
            fr(l,j+1,m+1)a[o][l]-=a[o][j]*a[i][l];
            a[o][j]=0.0;
            }
        ++j;
        }
    rf(i,0,n)fr(j,0,m+1)if(a[i][j]<-e||a[i][j]>e){
        if(j==m)return printf("Imposibil\n"),0;
        x[j]=a[i][m];
        fr(k,j+1,m)x[j]-=x[k]*a[i][k];
        break;
        }
    fr(i,0,m)printf("%.8lf ",x[i]);printf("\n");
    return 0;
    }