Cod sursa(job #2553747)

Utilizator elenaisaiaElena Isaia elenaisaia Data 22 februarie 2020 11:35:54
Problema Algoritmul lui Gauss Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.53 kb
#include <iostream>
#include <fstream>

using namespace std;

int n,m;
double a[305][305],sol[305];

void citire()
{
    ifstream fin("gauss.in");
    fin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m+1;j++)
            fin>>a[i][j];
}

void schimbare(int l1,int l2)
{
    for(int i=1;i<=m+1;i++)
    {
        int aux=a[l1][i];
        a[l1][i]=a[l2][i];
        a[l2][i]=aux;
    }
}

void gauss()
{
    for(int k=1;k<m;k++)
    {
        if(a[k][k]==0)
        {
            int i=k+1;
            while(i<=n&&a[i][k])
                i++;
            if(i<=n)
                schimbare(k,i);
        }
        if(a[k][k])
        {
            double nr=1/a[k][k];
            a[k][k]=1;
            for(int j=k+1;j<=m+1;j++)
                a[k][j]*=nr;
            for(int i=k+1;i<=n;i++)
            {
                nr=a[i][k]/a[k][k];
                for(int j=k;j<=m+1;j++)
                    a[i][j]-=nr*a[k][j];
            }
        }
    }
    /*for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
            cout<<a[i][j]<<" ";
        cout<<" "<<a[i][m+1]<<"\n";
    }*/
}

void solutie()
{
    for(int i=n;i>0;i--)
    {
        sol[i]=a[i][m+1];
        for(int j=m;j>i;j--)
            sol[i]-=a[i][j]*sol[j];
        sol[i]/=a[i][i];
    }
}

void afisare()
{
    ofstream fout("gauss.out");
    for(int i=1;i<=m;i++)
        fout<<sol[i]<<' ';
}

int main()
{
    citire();
    gauss();
    solutie();
    afisare();
    return 0;
}