Cod sursa(job #2752444)

Utilizator valentinchipuc123Valentin Chipuc valentinchipuc123 Data 18 mai 2021 00:07:20
Problema Algoritmul lui Gauss Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.69 kb
#include <bits/stdc++.h>

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

const double EPS=1e-10;
const int DIM=303;

int N,M;
double A[DIM][DIM],X[DIM];

void ecuation()
{
    int i=1,j=1;

    while(i<=N&&j<=M)
    {
        if(abs(A[i][j])<=EPS)
        {
            bool OK=0;
            for(int z=i+1; z<=N; z++)
                if(abs(A[z][j])>EPS)
                {
                    OK=1;
                    for(int h=j; h<=M+1; h++)
                        swap(A[z][h],A[i][h]);
                }
            if(OK==0)
            {
                j++;
                continue;
            }
        }

        for(int z=j+1; z<=M+1; z++) A[i][z]/=A[i][j];
        A[i][j]=1.0;

        for(int z=i+1; z<=N; z++)
        {
            for(int h=j+1; h<=M+1; h++)
            {
                A[z][h]-=A[i][h]*A[z][j];
            }
            A[z][j]=0.0;
        }

        i++;
        j++;
    }


}

int solve()
{
    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<<fixed<<setprecision(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];
    }

    ecuation();

    if(solve()) afisare();
    else g<<"Imposibil";

    return 0;
}