Cod sursa(job #1332740)

Utilizator maribMarilena Bescuca marib Data 2 februarie 2015 13:08:36
Problema Algoritmul lui Gauss Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.89 kb
#include <fstream>
#include <iomanip>
using namespace std;

int n, m;

float coef[301][301], sol[301];

ifstream in("gauss.in");
ofstream out("gauss.out");

int look_for(int ind, int lin)
{
    int k;
    for(k=lin; k<=n; ++k)
    {
        if(coef[k][ind]!=0)
        {
            return k; break;
        }
    }
    if(k==n+1) return k;
}

void scade(int ind, int col)
{
    float inm;
    for(int k=ind+1; k<=n; ++k)
    {
        inm=coef[k][col];
        for(int p=col; p<=m+1; ++p)
        {
            coef[k][p]-=inm*coef[ind][p];
        }
    }
}

void construieste()
{
    int i=1, j=1, x;
    while(i<=n&&j<=m)
    {
        x=look_for(j, i);
        if(x==n+1)
        {
            j++;
        }
        else
        {
            float imp=coef[x][j];
            for(int k=1; k<=m+1; ++k)
            {
                swap(coef[i][k], coef[x][k]);
                coef[i][k]/=imp;
            }
            scade(i, j);
            i++; j++;
        }
    }
}

void gaseste()
{
    int x=0, j;
    for(int i=n; i>0; --i)
    {
        for(j=1; j<=m+1; ++j)
        {
            if(coef[i][j]!=0)
                break;
        }
        if(j==m+1)
        {
            out<<"IMPOSIBIL\n";
            x=1;
            break;
        }
        else
        {
            sol[j]=coef[i][m+1];
            for(int k=j+1; k<=m; ++k)
            {
                sol[j] -= coef[i][k]*sol[k];
            }
        }
    }
    if(!x)
    {
        for(int i=1; i<=m; ++i)
        {
            out<<fixed<<setprecision(10)<<sol[i]<<" ";
        }
        out<<"\n";
    }
}

int main()
{
    in>>n>>m;
    for(int i=1; i<=n; ++i)
    {
        for(int j=1; j<=m+1; ++j)
        {
            in>>coef[i][j];
        }
    }
    construieste();
    gaseste();
    in.close();
    out.close();
    return 0;
}