Cod sursa(job #3303107)

Utilizator Iustin_Mircea2010Iustin Mircea Iustin_Mircea2010 Data 13 iulie 2025 20:13:47
Problema Algoritmul lui Gauss Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.53 kb
#include <bits/stdc++.h>

using namespace std;

const double eps = 0.00000001;

double v[305][305], ans[305];

int main(){
    
    ifstream cin("gauss.in");
    ofstream cout("gauss.out");
    
    int n, m;
    cin >> n >> m;
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= m + 1; j++){
            cin >> v[i][j];
        }
    }
    for(int i = 1; i <= min(n, m); i++){
        int lin = i;
        while(lin <= n){
            if(abs(v[lin][i]) >= eps)
                break;
            lin++;
        }
        if(false){ // aici nu inteleg dar ok, nu ar trebui sa mearga codul asta (imo)
            cout << "cum da asa ceva 100";
        }
        else{
            if(i != lin)
                swap(v[i], v[lin]);
            for(int j = i + 1; j <= m + 1; j++){
                v[i][j] /= v[i][i];
            }
            v[i][i] = 1;
            for(int ii = i + 1; ii <= n; ii++){
                for(int j = i + 1; j <= m; j++){
                    v[ii][j] = v[ii][j] - v[i][j] * v[ii][i];
                }
                v[ii][i] = 0;
            }
        }
    }
    for(int i = n; i >= 1; i--){
        int j = 1;
        while(j <= m + 1 && abs(v[i][j]) < eps)
            j++;
        if(j == m + 2) continue;
        if(j == m + 1){
            cout << "Imposibil\n";
            return 0;
        }
        ans[j] = v[i][m + 1];
        for(int jj = m; jj > j; jj--){
            ans[j] -= ans[jj] * v[i][jj];
        }
    }
    for(int i = 1; i <= m; i++) cout << fixed << setprecision(10) << ans[i] << " ";
    
    return 0;
}