Cod sursa(job #2392239)

Utilizator Mirela_MagdalenaCatrina Mirela Mirela_Magdalena Data 29 martie 2019 20:10:39
Problema Algoritmul lui Gauss Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.5 kb
#include <cstdio>
#include <algorithm>
#define epsi 0.0000000001
using namespace std;

double coef[500][500];
double valori[500];
int N, M;

void imparte_linia_i(int i, int j)
{
    double ca_sa_fie_1 = coef[i][j];
    for(int c=1; c<=M+1; c++)
        coef[i][c] = coef[i][c] / ca_sa_fie_1;
}

void elimin_lit(int i, int nr, int i_init)
{
    for(int j=1; j<=M+1; j++)
        coef[i][j] += coef[i_init][j] * nr;
}




void rezolva_linia(int k, int j)
{
    int i;
    for(i=k; i<=N; i++)
        if(abs(coef[i][j]) >= epsi)
            break;
    if(i == N + 1)
        return;
    swap(coef[i], coef[k]);
    imparte_linia_i(i, j);
    for(int linie = i+1; linie <= N; linie ++)
        elimin_lit(linie, coef[linie][j] * (-1), i);
}

void raspuns_final()
{
    if(N == M)
    {
        valori[N] = coef[N][M+1]/coef[N][M];
        for(int i=N-1; i>=1; i--)
        {
            double rez = coef[i][M+1];
            for(int j=i+1; j<=N; j++)
                rez -= coef[i][j] * valori[j];
            valori[i] = rez / coef[i][i];
        }
        for(int i=1; i<=M; i++)
            printf("%.8f ", valori[i]);
    }
}



int main()
{
    freopen("guess.in", "r", stdin);
    freopen("gauss.out", "w", stdout);
    scanf("%d %d", &N, &M);///N linii M+1 intregi
    for(int i=1; i<=N; i++)
        for(int j=1; j<=M+1; j++)
            scanf("%lf", &coef[i][j]);
    for(int i=1; i<N; i++)
        rezolva_linia(i, i);
    raspuns_final();
    return 0;
}