Cod sursa(job #2663658)

Utilizator zarg169Roxana zarg169 Data 26 octombrie 2020 23:07:25
Problema Algoritmul lui Gauss Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.67 kb
#include <iostream>
#include <fstream>
#include <cmath>
#include <iomanip>

using namespace std;
double matrix[305][305];
double ans[305];

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

    int n, m;
    fin >> n >> m;
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= m + 1; ++j) {
            fin >> matrix[i][j];
        }
    }

    int j = 1, i = 1, pos;

    while (j <= m && i <= n) {
        double maxim = 0;
        for (int a = i; a <= n; ++a) {
            if (maxim <= abs(matrix[a][j])){
                maxim = abs(matrix[a][j]);
                pos = a;
            }
        }
        if (maxim == 0) {
            j += 1;
        } else {
            double beta = matrix[pos][j];
            for (int e = 1; e <= m+1; ++e) {
                matrix[pos][e] /= beta;
                swap(matrix[i][e], matrix[pos][e]);
            }
            int c = i;
            i += 1;
            for (int a = i; a <= n; ++a) {
                double z = matrix[a][j] / matrix[c][j];
                for (int d = j; d <= m+1; ++d) {
                     matrix[a][d] -= z * matrix[c][d];
                }
            }
            j += 1;
        }
    }

    for (int i = n; i >= 1; --i) {
        if (matrix[i][m] == 0 && matrix[i][m+1] != 0) {
            fout << "IMPOSIBIL" << " ";
            break;
        } else {
        ans[i] = matrix[i][m + 1];
        for (int j = m; j > i; --j) {
            ans[i] -= matrix[i][j] * ans[j];
        }
        }
    }

    for (int i = 1; i <= n; ++i) {
         fout << setprecision(8) << fixed << ans[i] << " ";
    }

    return 0;
}