Cod sursa(job #1332942)

Utilizator RaduGabriel2012Dinu Radu RaduGabriel2012 Data 2 februarie 2015 16:35:46
Problema Algoritmul lui Gauss Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
ifstream f("gauss.in");
ofstream g("gauss.out");
 float a[305][305],val[305];
 int n,m,lin;

int main()
{ int i,j,lin,col,l,c;

    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(lin=i;lin<=n;lin++)
      if (a[i][j]>1e-9 || a[i][j]<-1e-9) break;

     if (lin>n) {j++; continue; }

     for(col=1;col<=m+1;col++)
      swap(a[i][col],a[lin][col]);

      for(col=j+1;col<=m+1;col++)
        a[i][col]=a[i][col]/a[i][j];

     a[i][j]=1;




      for(l=1;l<=n;l++)
       if (l!=i)
        {
         for(c=1;c<=m+1;c++)
          if (c!=j) a[l][c]-=(a[l][j]/a[i][j])*a[i][c];

          a[l][j]=0;
        }

    for(l=1;l<=n;l++)
      {for(c=1;c<=m+1;c++)
        cout<<a[l][c]<<"  ";

        cout<<"\n";
      }

      cout<<"\n\n";

    i++; j++;
   }

    for(i=n;i>=1;i--)
    {
    for(j=1;j<=m+1;j++)
       if (a[i][j]>1e-9 || a[i][j]<-1e-9) break;

      if (j==m+1) {g<<"Imposibil\n"; return 0;}

      if (j!=m+2)
      {  val[j]=a[i][m+1];

        for(c=j+1;c<=m;c++)
         val[j]-=a[i][c]*val[c];
      }

    }

    for(i=1;i<=m;i++)
     g<<fixed<<setprecision(8)<<val[i]<<" ";
    return 0;
}