Cod sursa(job #2728685)

Utilizator Iulia14iulia slanina Iulia14 Data 23 martie 2021 16:08:13
Problema Algoritmul lui Gauss Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.88 kb
#include <cmath>
#include <fstream>
#include <iomanip>
using namespace std;
ifstream cin ("gauss.in");
ofstream cout ("gauss.out");
int n, m;
double a[505][505];
double zero = 1e-10;
double sol[505];
int main()
{
    int i, j;
    cin >> n >> m;
    for (i = 1; i <= n; i++)
        for (j = 1; j <= m + 1; j++)
            cin >> a[i][j];
    j = 1;
    i = 1;
    while (j <= m && i <= n)
    {
        if (abs(a[i][j]) <= zero)
        {
            int col = -1;
            for (int ii = i + 1; ii <= n; ii++)
            {
                if (abs(a[ii][j]) > zero)
                {
                    col = ii;
                    for (int jj = j; jj <= m + 1; jj++)
                        swap(a[ii][jj], a[i][jj]);
                    break;
                }
            }
            if (col == -1)
            {
                j++;
                continue;
            }
        }
        for(int jj = j + 1; jj <= m + 1; jj++)
            a[i][jj] = a[i][jj] / a[i][j];
        a[i][j] = 1;
       for(int ii = i + 1; ii <= n; ii++)
        {
            for(int jj = j + 1; jj <= m + 1; jj++)
                a[ii][jj] -= a[ii][j] * a[i][jj];
            a[ii][j] = 0;
        }
        i++;
        j++;
    }
   /* for (i = 1; i <= n; i++)
        {for (j = 1; j <= m + 1; j++)
            cout << a[i][j] << " ";
            cout << endl;
        }*/
    for (i = n; i; i--)
        for (j = i; j <= m + 1; j++)
        {
            if (abs(a[i][j]) > zero)
            {
                if (j == m + 1)
                    return 0;
                for (int jj = j + 1 ; jj <= m; jj++)
                    sol[j] -= sol[jj] * a[i][jj];
                sol[j] += a[i][m + 1];
                break;
            }
        }
    for (i = 1; i <= n; i++)
        cout << fixed << setprecision(10) << sol[i] << " ";
    return 0;

}