Cod sursa(job #1952034)

Utilizator radu.leonardoThe Doctor radu.leonardo Data 3 aprilie 2017 21:53:49
Problema Algoritmul lui Gauss Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <bits/stdc++.h>

using namespace std;
constexpr double eps=0.000001;
int N,M;
double V[301][301];
double S[301],p[300];

void read_data()
{
    ifstream f("gauss.in");
    f>>N>>M;
    for(int i=1;i<=N;i++)
        for(int j=1;j<=M+1;j++)
            f>>V[i][j];
    f.close();
}

int isZero(double x)
{
    return fabs(x)<eps;
}

void computeGaussianElimination()
{
    freopen("gauss.out", "w", stdout);
    for (int i=1;i<=N;++i)
    {

        int first;
        for(first=1;isZero(V[i][first]);first++);///Caut primul element nenul.

        if(first==M+2) continue;///Daca toti coef sunt 0 si rezoltatul este tot 0 avem solutie
        if(first==M+1)  ///Daca toti coef sunt nuli si rezultatul nu este atunci nu avem solutie
        {
            cout << "Imposibil" << '\n';
            return;
        }


        ///Eliminam elementul first de pe celelalte linii
        for(int j=1;j<=N;++j)
            if (i!=j)
            {
                int aux=V[j][first]/V[i][first];
                for(int k=1;k<=M+1;++k) V[j][k]-=V[i][k]*aux;
            }

        p[i] = first;
    }

     for(int i=1; i<=M; ++i)
        if(p[i]) S[p[i]]=V[i][N+1]/V[i][p[i]];

     for(int i=1; i<=N; ++i) printf("%.10lf ", S[i]);
}


int main()
{
    read_data();
    computeGaussianElimination();
}