Cod sursa(job #1543077)

Utilizator sebinechitasebi nechita sebinechita Data 5 decembrie 2015 22:03:36
Problema Algoritmul lui Gauss Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.04 kb
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
ifstream fin("gauss.in");
ofstream fout("gauss.out");
#define eps 1e-3
#define MAX 302

double a[MAX][MAX], rez[MAX];
int n, m;

void af()
{
    int i, j;
    for(i = 1 ; i <= n ; i++)
    {
        for(j = 1 ; j <= m + 1 ; j++)
        {
            cout << a[i][j] << " ";
        }
        cout << "\n";
    }
    cout << '\n';
}

int main()
{
    int i, j, ci, cj;
    fin >> n >> m;
    for(i = 1 ; i <= n ; i++)
    {
        for(j = 1 ; j <= m + 1 ; j++)
        {
            fin >> a[i][j];
        }
    }
    i = j = 1;
    while(i <= n && j <= m)
    {
        for(ci = i ; ci <= n ; ci++)
        {
            if(a[ci][j])
            {
                for(cj = j ; cj <= m + 1 ; cj++)
                {
                    swap(a[i][cj], a[ci][cj]);
                }
                break;
            }
        }
        if(ci == n + 1)
        {
            j++;
            continue;
        }
        //af();
        for(cj = m + 1 ; cj >= j ; cj--)
        {
            a[i][cj] /= a[i][j];
        }
       // af();
        for(ci = i + 1 ; ci <= n ; ci++)
        {
            if(a[ci][j])
            {
                for(cj = m + 1 ; cj >= j ; cj--)
                {
                    a[ci][cj] -= a[ci][j] * a[i][cj];
                }
            }
        }
       // af();
     //   cout << "---------------------\n\n";
        i++;
        j++;
    }
    //af();
    if(!a[m][m])
    {
        fout << "Imposibil\n";
        return 0;
    }
    for(i = m + 1 ; i <= n ; i++)
        if(a[i][m + 1] >= eps)
        {
            fout << "Imposibil\n";
            return 0;
        }
    for(i = m ; i >= 1 ; i--)
    {
        rez[i] = a[i][m + 1];
        for(j = i + 1 ; j <= m ; j++)
        {
            rez[i] -= a[i][j] * rez[j];
        }
    }
    for(i = 1 ; i <= m ; i++)
    {
        fout << fixed << setprecision(8) << rez[i] << " ";
    }
    fout << "\n";

}