Cod sursa(job #1806310)

Utilizator ArmaghedonDodon Aurel Armaghedon Data 15 noiembrie 2016 09:00:10
Problema Algoritmul lui Gauss Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.67 kb
#include <iostream>
#include <fstream>
#include <cmath>
#include <algorithm>
#include <vector>
#include <iomanip>
using namespace std;

void esalon(vector<vector<double> > &a,int n)
{
    double k;
    for(int i=0;i<n-1;i++)
    {
        if (a[i][i]==0)
        {
            k=0;
            for (int j=i+1;j<n;j++)
            {
                if (a[j][i]!=0)
                {
                    k=j;
                }
            }
            if (k!=0)
            {
                for (int j=0;j<n+1;j++)
                {
                    swap(a[i][j],a[k][j]);
                }
            }
            else
            {
                continue;
            }
        }
        for (int j=i+1;j<n;j++)
        {
            k=-a[j][i]/a[i][i];
            for (int l=i;l<n+1;l++)
            {
                a[j][l]=a[j][l]+a[i][l]*k;
            }
        }
    }
}
void sol(vector<double> &v,vector<vector<double> >a,int n)
{
    for (int i=n-1;i>=0;i--)
    {
        double s=0;
        for (int j=i+1;j<n;j++)
        {
            s=s+a[i][j]*v[j];
        }
        if (a[i][i]!=0)
        {
            v[i]=(a[i][n]-s)/a[i][i];
        }
        else {v[i]=0;}
    }
}

ifstream in("gauss.in");
ofstream out("gauss.out");
main()
{
    vector<double>x(4);
    vector<vector<double> > a(3);
    fill(a.begin(),a.end(),x);
    int n=3;
    for (int i=0;i<n;i++)
    {
        for (int j=0;j<n+1;j++)
        {
            in>>a[i][j];
        }
    }
    esalon(a,n);
    vector<double> s(n);
    sol(s,a,n);
    for (int i=0; i<n; i++)
    {
        out<<fixed<<setprecision(12)<<s[i]<<" ";
    }
}