Cod sursa(job #1791941)

Utilizator ade_tomiEnache Adelina ade_tomi Data 29 octombrie 2016 21:10:49
Problema Algoritmul lui Gauss Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.75 kb
#include <iostream>
#include <fstream>
#include <iomanip>
#define NMAX 303
#define EPS 0.00000001
using namespace std;
double a[NMAX][NMAX];
int r[NMAX];
bool eps (double x)
{
    if (x  > -EPS && x < EPS)
        return 0;
    return 1;
}
int n, m;
int main ()
{
    ifstream cin ("gauss.in");
    ofstream cout ("gauss.out");
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m + 1; j++)
            cin >> a[i][j];
     int l = 1, c = 1;
     while (l <= n && c <= m)
     {
         if (eps(a[l][c]) == 0)
         {
             int next_lin = l + 1;
             while (eps(a[next_lin][c]) == 0 && next_lin <= n)
                 next_lin++;
             if (next_lin == n  + 1){
                 c++;
                 continue;
             }
             swap (a[next_lin], a[l]);
         }
         for (int i = 1; i <= n; i++)
         {
             if (i == l)
                 continue;
             double k = a[i][c] / a[l][c];
             for (int  j =  1; j  <= m + 1; j++)
                 a[i][j] -= k * a[l][j];

         }
         cout << setprecision (2) << fixed;
        /* for (int ii = 1; ii <= n; ii++)
         {
             for (int jj = 1; jj <= m + 1; jj++)
                 cout << a[ii][jj] << " ";
             cout << "\n";
         }
         cout << "\n\n\n";*/
         r[c] = l;
         l++;
         c++;

     }
     if (c > m)
     {
         for (int i = l; i <= n; i++)
             if (eps (a[i][m + 1]))
             {
                 cout << "Imposibil \n";
                 return 0;
             }

     }
     cout << setprecision (10) << fixed;
     for (int i = 1; i <= m; i++)
         if (r[i] == 0)
             cout << "0.0 ";
         else cout << a[r[i]][m + 1] / a[r[i]][i] << " " ;
    return 0;
}