Cod sursa(job #781869)

Utilizator ctlin04UAIC.VlasCatalin ctlin04 Data 25 august 2012 12:34:24
Problema Algoritmul lui Gauss Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include<fstream>
#include<iomanip>
using namespace std;
double a[305][305],sol[305];

int main(void){
    ifstream fin("gauss.in");
    ofstream fout("gauss.out");
    int i,j,n,m,k,k1; double aux; bool ok=true;
    fin>>n>>m; ++m;
    for (i=1; i<=n; ++i)
     for (j=1; j<=m; ++j) fin>>a[i][j];
    i=1; j=1;
    while (i<=n&&j<m){
          for (k=i; k<=n; ++k)
           if (a[k][j]!=0){ for (k1=j; k1<=m; ++k1) {aux=a[i][k1]; a[i][k1]=a[k][k1]; a[k][k1]=aux; } break; }
            aux=a[i][j];
          for (k=j; k<=m; ++k)a[i][k]/=aux;
           for (k=i+1; k<=n; ++k){
               aux=a[k][j]; a[k][j]=0;
               if (aux!=0) for (k1=j+1; k1<=m; ++k1)a[k][k1]=a[k][k1]/aux-a[i][k1];
               }
          ++i;++j;
    }
     for (i=1; i<=n; ++i){
         int d=0;
         for (j=1; j<=m; ++j) if (a[i][j]!=0)++d;
         if (d==1&&a[i][m]!=0) { ok=false; break; }
      }
    if (ok==true){
              for (k=j-1; k>=1; --k){
                  aux=a[k][m];
                   for (int k1=m-1; k1>k; --k1)aux-=sol[k1]*a[k][k1];
                  sol[k]=aux;
                  }
                 for (k=1; k<m; ++k) fout<<fixed<<setprecision(10)<<sol[k]<<" ";
                 }
      else fout<<"Imposibil";
 return(0);
}