Cod sursa(job #3185224)

Utilizator alex210046Bratu Alexandru alex210046 Data 18 decembrie 2023 15:48:29
Problema Algoritmul lui Gauss Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <fstream>
#include <cmath>
#include <iomanip>
using namespace std;
ifstream f("gauss.in");
ofstream g("gauss.out");

int n,m;
long double s[302][302], x[302];

int main() {
    f >> n >> m;
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= m + 1; j++)
            f >> s[i][j];
    long double EPS = 1e-10;
    for(int i = 1, j = 1, k; i <= n && j <= m;) {
        for(k = i; k <= n; ++k)
            if(s[k][j] != 0)
                break;
        if(k > n) ++j;
        if(k != i)
            for(int l = 1; l <= m + 1; ++l)
                swap(s[i][l],s[k][l]);
        for(k = i + 1; k <= n; ++k)
            for(int l = m + 1; l >= j; --l)
                s[k][l] -= ((s[k][j] * s[i][l]) / s[i][j]);
        ++i; ++j;
    }
    for(int i = n; i > 0;--i)
        for(int j = 1; j <= m + 1; ++j)
            if(fabs(s[i][j]) > EPS) {
                if(j == m + 1) {
                    g << "Imposibil";
                    return 0;
                }
                x[j] = s[i][m + 1];
                for(int k = j + 1; k <= m; ++k)
                    x[j] -= s[i][k] * x[k];
                x[j]/=s[i][j];
                break;
            }
    for(int i = 1; i <= m; i++)
        g << fixed << setprecision(8) << x[i] << ' ';

    return 0;
    f.close();
    g.close();
}