Cod sursa(job #1846906)

Utilizator stefan_gheorgheGheorghe Stefan stefan_gheorghe Data 14 ianuarie 2017 09:42:49
Problema Algoritmul lui Gauss Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include<fstream>
#include<cstdlib>
#include <iomanip>
using namespace std;
ifstream f("gauss.in");
ofstream g("gauss.out");
float a[301][301],b[301],x[301],temp;
int i,j,n,m,iv,t,k,l;
void load()
{
    f>>n>>m;
    for(i=1; i<=n; i++){for(j=1; j<=m; j++)

            f>>a[i][j];
            f>>b[i];
        }
}
void gauss()
{
    for(j=1; j<=n-1; j++)
    {
        iv=j;
        t=1;
        while((iv<=n) && (t==1))
            if(a[iv][j] == 0) iv=iv+1;
            else t=0;
        if(t==1)
        {
            g<<"Imposibil";
        }
        if(j!=iv)
        {
            for(k=j; k<=m; k++)temp=a[j][k],a[j][k]=a[iv][k],a[iv][k]=temp;
            temp=b[j],b[j]=b[iv],b[iv]=temp;
        }
        for(l=j+1; l<=n; l++)
        {
            for(k=j+1; k<=m; k++)a[l][k]=a[l][k] - a[j][k] * a[l][j] / a[j][j];
            b[l]=b[l] - b[j] * a[l][j] / a[j][j];
        }
    }
    if(a[n][n]==0) g<<"Imposibil";
}
void calc()
{
    x[n]=b[n] / a[n][m];
    for
    (i=n-1; i>=1; i--)
    {
        temp = b[i];
        for
        (j=i+1; j<=m; j++) temp = temp - a[i][j] * x[j];
        x[i] = temp / a[i][i];
    }
}
void dload(){for(i=1; i<=n; i++)g<<setprecision(11)<<x[i]<<' ';}
int main()
{
    load();
    gauss();
    calc();
    dload();
    return 0;
}