Cod sursa(job #754551)

Utilizator XladhenianGrigorita Vlad-Stefan Xladhenian Data 2 iunie 2012 15:57:53
Problema Algoritmul lui Gauss Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.64 kb
                                                     
#include <fstream>
using namespace std;

long N,M;
float A[305][305];
float Res[305];

const float EPS = 10e-5;

void InterschimbaLinii(long i,long j)
{
 for (long l = 0;i <= M;l += 1)
  {
   float c = A[i][l];
   A[i][l] = A[j][l];
   A[j][l] = c;
  }
}

long CautaLinii(long i)
{
 if (abs(A[i][i]) <= EPS)
   {
    long j;
    for (j = i + 1;j < N;j += 1)
     {
      if (abs(A[j][i]) > EPS)
        {
         InterschimbaLinii(i,j);
         return 1;
        }
     }
    return 0;
   }
 return 1;
}

int main(void)
{
 long i,j,k,l;
 fstream fin("gauss.in",ios::in);
 fstream fout("gauss.out",ios::out);
 fin >> N >> M;
 for (i = 0;i < N;i += 1)
  {
   for (j = 0;j <= M;j += 1)
    {
     fin >> A[i][j];
    }
  }
 for (i = 0,j = 0;i < N && j < M;)
  {
   if (CautaLinii(i) == 0)
     {
      j += 1;
      continue;
     }
   for (k = j + 1;k <= M;k += 1)
    {
     A[i][k] /= A[i][j];
    }
   A[i][j] = 1;
   for (l = i + 1;l < N;l += 1)
    {
     for (k = j + 1;k <= M;k += 1)
      {
       A[l][k] -= A[l][j] * A[i][k];
      }
     A[l][j] = 0;
    }
   i += 1;
   j += 1;
  }
 for (i = N - 1;i >= 0;i -= 1)
  {
   for (j = 0;j <= M;j += 1)
    {
     if (j == M)
       {
        fout << "Imposibil\n";
        fin.close();
        fout.close();
        return 0;
       }
     Res[i] = A[i][M];
     for (k = i + 1;k < M;k += 1)
      {
       Res[i] -= Res[k] * A[i][k];
      }
     break;
    }
  }
 for (i = 0;i < M;i += 1)
  {
   fout << Res[i] << " ";
  }
 fin.close();
 fout.close();
 return 0;
}