Cod sursa(job #2078247)

Utilizator ListenerRavasz Tamas Listener Data 29 noiembrie 2017 09:49:51
Problema Algoritmul lui Gauss Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.72 kb
#include <iostream>
#include <fstream>
#include <iomanip>

using namespace std;


const int nm = 1024;

double er[nm+2];
double a[nm+2][nm+2];
double oszt1,kivossz;
int n, m, ern;
ifstream fin("gauss.in");
ofstream fout("gauss.out");

int main()
{
    fin >> n >> m;
    for(int i = 0; i < n; ++i)
    {
        for(int j = 0; j <= m; ++j)
        {
            fin >> a[i][j];
        }
    }

    /*for(int i = 0 ; i < n; ++i)
    {
        for(int j = 0 ; j <= m; ++j)
        {
            cout << a[i][j] <<" ";
        }
        cout << endl;
    }*/

    for(int k = 0, l = 0 ; k < n , k <= m; ++k, ++l)
    {
        for(int i = k+1; i < n; ++i)
        {
            oszt1 = a[i][l];
            for(int j = l; j <= m; ++j)
            {
                if(a[k][l])
                    a[i][j] =a[i][j] - (a[k][j] * (oszt1/a[k][l]));

            }
        }

    }

    /*for(int i = 0 ; i < n; ++i)
    {
        for(int j = 0 ; j <= m; ++j)
        {
            cout << setw(10) << a[i][j] << " ";
        }
        cout << endl;
    }*/



        if(!a[n-1][m-1])
        {
           fout << "Imposibil";
        }
        else
        {
            ern = 0;
            int i,j,kiv;
            for( i = n-1; i >=0; --i)
            {
                kivossz = 0;
                for( j = m - 1, kiv = 0; j >= 0, kiv < ern; --j, ++kiv)
                {
                    kivossz += a[i][j] * er[kiv];
                }
                //cout << a[i][j] << endl;
                er[ern++] = (a[i][m] - kivossz)/a[i][j];
            }
        }

    for(int z = ern-1 ; z >= 0; --z)
        fout << fixed << setprecision(8) << er[z] << " ";
    return 0;
}