Cod sursa(job #3332262)

Utilizator brianabucur11Briana Bucur brianabucur11 Data 5 ianuarie 2026 18:34:09
Problema Algoritmul lui Gauss Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.72 kb
#include <bits/stdc++.h>

using namespace std;

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

const double err = 1e-7;

int n, m;
int ord[305];

vector <double> ec[305];
double rez[305];

void gauss ()
{
    for (int i = 1; i <= m; i++)
        ord[i] = -1;

    int i = 1, j = 1;

    while (i <= n && j <= m)
    {
        int poz = i;
        for (int ii = i; ii <= n; ii++)
        {
            if (fabs (ec[ii][j]) > fabs (ec[poz][j]))
                poz = ii;
        }

        if (fabs (ec[poz][j]) >= err)
        {
            swap (ec[i], ec[poz]);
            ord[j] = i;

            for (int ii = 1; ii <= n; ii++)
            {
                if (ii != i)
                {
                    double z = ec[ii][j] / ec[i][j];
                    for (int jj = j; jj <= m + 1; jj++)
                        ec[ii][jj] -= ec[i][jj] * z;
                }
            }
            i++;
        }
        j++;
    }

    for (int i = 1; i <= m; i++)
    {
        rez[i] = 0;
        if (ord[i] != -1)
            rez[i] = ec[ord[i]][m + 1] / ec[ord[i]][i];
    }

    for (int i = 1; i <= n; i++)
    {
        double sum = 0;
        for (int j = 1; j <= m; j++)
            sum += rez[j] * ec[i][j];

        if (fabs (sum - ec[i][m + 1]) > err)
        {
            fout << "Imposibil";
            return;
        }
    }

    fout << fixed << setprecision (10);
    for (int i = 1; i <= m; i++)
        fout << rez[i] << " ";
}

int main ()
{
    fin >> n >> m;

    for (int i = 1; i <= n; i++)
    {
        ec[i].resize (m + 2);
        for (int j = 1; j <= m + 1; j++)
            fin >> ec[i][j];
    }

    gauss();
    return 0;
}