Cod sursa(job #806918)

Utilizator veleanduAlex Velea veleandu Data 3 noiembrie 2012 18:43:56
Problema Algoritmul lui Gauss Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.47 kb
#include <cstdio>
#include <iostream>
#include <utility>
#include <iomanip>
using namespace std;

    #define max_n 305
    #define prec 1000000

    struct Linie {
        double val[max_n];
    } L[max_n];

    int n,m,i,j,l;
    double p;

/*void show (){
    int i,j;

    for ( i=1; i<=n; i++ ){
        for ( j=0; j<=m; j++ ){
            printf("%f      ",L[i].val[j]);
        }
        printf("\n");
    }
    printf("\n\n");

}*/


int main(){

    freopen ("gauss.in","r",stdin);
    freopen ("gauss.out","w",stdout);

//    scanf ("%d %d", &n, &m );
    cin>>n>>m;
    for ( i=1; i<=n; i++ ){
        for ( j=1; j<=m; j++ ){
            cin>>L[i].val[j];
            L[i].val[j]*=prec;
        }
        cin>>L[i].val[0];
        L[i].val[0]*=prec;
    }
    if ( m > n ){
        printf("Imposibil");
        return 0;
    }
    for ( i=1; i<=m; i++ ){
        j=i;

        while ( ( L[j].val[i] == 0 ) && ( j<=n ) ) {
            j++;
        }
        if ( j > n ){
            printf("Imposibil");
            return 0;
        }
        if ( i!=j ){
            swap ( L[i], L[j] );
        }

        for ( j=1; j<=n; j++ ){
            if ( ( i!=j ) && ( L[j].val[i] ) ) {
                // scadem 
                p=L[j].val[i] / L[i].val[i];
                for ( l=0; l<=m; l++ ){
                    L[j].val[l] -= L[i].val[l]*p;
                }
            }
        }
    }
    for ( i=1; i<=m; i++ ){
        printf("%.11lf ",L[i].val[0]/L[i].val[i]);
    }
    return 0;
}