Cod sursa(job #3334480)

Utilizator hiAvidMihaly David-Gabriel hiAvid Data 17 ianuarie 2026 22:15:20
Problema Algoritmul lui Gauss Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.82 kb
#include <fstream>
#include <iomanip>
#define NMAX 302
#define EPS 0.0000001
using namespace std;
ifstream in("gauss.in");
ofstream out("gauss.out");

int n, m;
double a[NMAX][NMAX], sol[NMAX];

int main()
{
    in >> n >> m;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m + 1; j++)
            in >> a[i][j];
    int i = 1, j = 1, k;
    while (i <= n && j <= m)
    {
        bool gasit = false;
        for (k = i; k <= n && gasit == false; k++)
            if (a[k][j] < -EPS || a[k][j] > EPS)
                gasit = true;
        if (gasit == false)
            j++;
        else
        {
            k--;
            if (k != i)
            {
                for (int g = j; g <= m + 1; g++)
                {
                    double aux = a[i][g];
                    a[i][g] = a[k][g];
                    a[k][g] = aux;
                }
            }
            for (int g = j + 1; g <= m + 1; g++)
                a[i][g] /= a[i][j];
            a[i][j] = 1;
            for (int l = i + 1; l <= n; l++)
            {
                for (int c = j + 1; c <= m + 1; c++)
                    a[l][c] -= a[l][j] * a[i][c];
                a[l][j] = 0;
            }
            i++;
            j++;
        }
    }
    for (int i = n; i >= 1; i--)
    {
        bool calc = false;
        for (int j = 1; j <= m + 1 && calc == false; j++)
            if (a[i][j] < -EPS || a[i][j] > EPS)
            {
                if (j == m + 1)
                {
                    out << "Imposibil";
                    return 0;
                }
                sol[j] = a[i][m + 1];
                for (int k = j + 1; k <= m; k++)
                    sol[j] -= a[i][k] * sol[k];
                calc = true;
            }
    }
    for (int i = 1; i <= n; i++)
        out << fixed << setprecision(8) << sol[i] << " ";
    return 0;
}