Cod sursa(job #3306203)

Utilizator Mateixx1Trandafir Matei Mateixx1 Data 8 august 2025 15:22:56
Problema Algoritmul lui Gauss Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.84 kb
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cmath>
using namespace std;
const double EPS=1e-10;
const int MAXN=300;

ifstream f("gauss.in");
ofstream g("gauss.out");

int N,M;
double a[MAXN+1][MAXN+2],x[MAXN+1];

void gauss() {
    int i=1,j=1,k,p;
    while(i<=N&&j<=M) {
        if(abs(a[i][j])<=EPS) {
            bool ok=0;
            for(k=i+1; k<=N; k++)
                if(abs(a[k][j])>EPS) {
                    ok=1;
                    for(p=j; p<=M+1; p++){
                        swap(a[i][p],a[k][p]);
                    }
                    break;
                }
            if(ok==0) { //if(k==n+1)
                j++;
                continue;
            }
        }
        for(k=j+1; k<=M+1; k++) {
            a[i][k]/=a[i][j];
        }
        a[i][j]=1.0;
        for(k=i+1; k<=N; k++) {
            for(p=j+1; p<=M+1; p++) {
                a[k][p]-=a[k][j]*a[i][p];
            }
            a[k][j]=0.0;
        }
        i++;
        j++;
    }
}

bool solutie() {
    for(int i=N; i>=1; i--) {
        for(int j=i; j<=M+1; j++) {
            if(abs(a[i][j])>EPS) {
                if(j==M+1) {
                    return 0;
                }
                x[j]=a[i][M+1];
                for(int k=j+1; k<=M; k++) {
                    x[j]-=x[k]*a[i][k];
                }
                break;
            }
        }
    }
    return 1;
}

void afisare() {
    g.setf(ios::fixed,ios::floatfield);
    g.precision(10);
    for(int i=1; i<=M; i++) {
        g<<x[i]<<' ';
    }
}

int main() {
    f>>N>>M;
    for(int i=1; i<=N; i++)
        for(int j=1; j<=M+1; j++)
            f>>a[i][j];
    gauss();
    if(solutie()) {
        afisare();
    } else {
        g<<"Imposibil";
    }
    f.close();
    g.close();
    return 0;
}