Cod sursa(job #2691039)

Utilizator OctavianVasileVasileOctavian OctavianVasile Data 26 decembrie 2020 19:56:15
Problema Algoritmul lui Gauss Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.59 kb
#include <bits/stdc++.h>
using namespace std;
#define DIM_MAX 303
ifstream fin ("gauss.in");
ofstream fout ("gauss.out");
const double epss = 1e-10;
int m, n;
int verif (double x){
    if (x >= -epss && x <= epss)
        return 1;
    return 0;
}
double v [DIM_MAX][DIM_MAX], ans [DIM_MAX];
int mvin (){
    fin >> n >> m;
    for (int i = 1; i <= n; i ++)
        for (int j = 1; j <= m + 1; j ++)
            fin >> v [i][j];
    for (int i = 1, j = 1; i <= n && j <= m; i ++, j ++){
        for (int k = i; k <= n; k ++){
            if (verif (v [k][j]) == 0){
                for (int u = 1; u <= m + 1; u ++)
                    swap (v [k][u], v [i][u]);
            }
        }
        if (verif (v [i][j]) == 1){
            i --; continue;
        }
        for (int l = j + 1; l <= m + 1; l ++)
            v [i][l] /= v [i][j];
        v [i][j] = 1;
        for (int k = i + 1; k <= n; k ++){
            for (int u = j + 1; u <= m + 1; u ++)
                v [k][u] -= v [k][j] * v [i][u];
            v [k][j] = 0;
        }
    }
    for (int i = n; i >= 0; i --){
        for (int j = 1; j <= m + 1; j ++){
            if (verif (v [i][j]) == 1)
                continue;
            if (j == m + 1){
                fout << "Imposibil";
                return 0;
            }
            ans [j] = v [i][m + 1];
            for (int k = j + 1; k <= m; k ++)
                ans [j] -= v [i][k] * ans [k];
            break;
        }
    }
    for (int i = 1; i <= m; i ++)
        fout << setprecision(10) << fixed << ans[i] << " ";
    return 0;
}