Cod sursa(job #887649)

Utilizator mihai27Mihai Popescu mihai27 Data 23 februarie 2013 23:01:54
Problema Algoritmul lui Gauss Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.41 kb
#include<fstream>

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

int n,m,i,j,k;
double a[305][305],r,sol[305];

int main()
{
    in>>n>>m;
    if (m>n)
    {
        out<<"Imposibil";
        return 0;
    }

    for (i=1;i<=n;i++)
        for (j=1;j<=m+1;j++)
            in>>a[i][j];

    for (i=1;i<n;i++)
    {
        if (a[i][i]==0)
        {
            for (k=i+1;k<=n;k++)
                if (a[k][i]!=0)
                {
                    for (j=1;j<=m+1;j++)
                    {
                        a[i][j]=a[k][j];
                        a[k][j]=0;
                    }
                    break;
                }
        }
        if (a[i][i]==0)
        {
            out<<"Imposibil";
            return 0;
        }
        for (j=i+1;j<=m+1;j++)
            a[i][j]=a[i][j]/a[i][i];
        a[i][i]=1;

        for (j=i+1;j<=n;j++)
        {
            r=a[j][i];
            a[j][i]=0;
            for (k=i+1;k<=m+1;k++)
                a[j][k]=a[j][k]-r*a[i][k];
        }
    }
    if (a[m][m]==0)
    {
        out<<"Imposibil";
        return 0;
    }
    for (i=m;i>=1;i--)
    {
        for (j=i+1;j<=m;j++)
            a[i][m+1]-=(a[i][j]*sol[j]);
        sol[i]=a[i][m+1]/a[i][i];
    }
    out.setf(ios::fixed,ios::floatfield);
    out.precision(8);
    for (i=1;i<=m;i++)
        out<<sol[i]<<' ';
}