Cod sursa(job #2111412)

Utilizator stefii_predaStefania Preda stefii_preda Data 21 ianuarie 2018 23:47:22
Problema Algoritmul lui Gauss Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.63 kb
#include <fstream>
#include <algorithm>
#include <iomanip>
#define epsi 0.0000001

using namespace std;

ifstream in ("gauss.in");
ofstream out ("gauss.out");


double A[305][305];
double x[305];

int main()
{
    int n, m, i, j, k;
    in >> n >> m;
    for(i = 1; i <= n; i++)
        for(j = 1; j <= m+1; j++)
            in >> A[i][j];
    i = 1;
    j = 1;
    while(i <= n && j <= m)
    {
        for(k = i; k <= n; k++)
            if(A[k][j] > epsi || A[k][j] < -epsi)
                break;
        if(k == n+1)
        {
            j++;
            continue;
        }
        //else
        //{
            if(k != i)
                for(int l = 1; l <= m+1; l++)
                    swap(A[i][l], A[k][l]);

            for(int l = j+1; l <= m+1; l++)
                A[i][l] /= A[i][j];
            A[i][j] = 1;

            for(int t = i+1; t <= n; t++)
            {
                for(int l = j+1; l <= m+1; l++)
                    A[t][l] -= A[t][j] * A[i][l];
                A[t][j] = 0;
            }
            i++;
            j++;
        //}

    }
    for(i = n; i >= 1; i--)
        for(j = 1; j <= m+1; j++)
            if(A[i][j] > epsi || A[i][j] < -epsi)
            {
                if(j == m+1)
                {
                    out << "Imposibil";
                    return 0;
                }
                x[j] = A[i][m+1];
                for(int l = j+1; l <= m; l++)
                    x[j] -= A[i][l]*x[l];
                break;
            }
    for(i = 1; i <= m; i++)
        out << setprecision(8) << fixed << x[i] <<" ";

    return 0;
}