Cod sursa(job #1489027)

Utilizator armandpredaPreda Armand armandpreda Data 20 septembrie 2015 14:03:17
Problema Algoritmul lui Gauss Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.55 kb
//#include <iostream>
#include <fstream>
#include <algorithm>
#include <iomanip>

using namespace std;

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

const int LIM=305, eps=0.0000001;
int n, m;
double mat[LIM][LIM], x[LIM];
int main()
{

    cin>>n>>m;
    for(int i=1; i<=n; ++i)
        for(int j=1; j<=m+1; ++j)
            cin>>mat[i][j];
    int i=1, j=1, k;
    while(i<=n and j<=m)
    {
        for(k=i; k<=n; ++k)
            if(fabs(mat[k][j])>eps)
                break;
        if(k==n+1)
        {
            j++;
            continue;
        }
        if(k!=i)
            for(int l=1; l<=m+1; ++l)
            {
                double cop=mat[i][l];
                mat[i][l]=mat[k][l];
                mat[k][l]=cop;
            }
        for(int l=j+1; l<=m+1; ++l)
            mat[i][l]/=mat[i][j];
        mat[i][j]=1;
        for(int u=i+1; u<=n; ++u)
        {
            for(int l=j+1; l<=m+1; ++l)
                mat[u][l]-=mat[u][j]*mat[i][l];
            mat[u][j]=0;
        }
        i++, j++;
    }
    for(i=n; i>0; --i)
        for(j=1; j<=m+1; ++j)
            if(fabs(mat[i][j])>eps)
            {
                if(j==m+1)
                {
                    cout<<"Imposibil";
                    return 0;
                }
                x[j]=mat[i][m+1];
                for(k=j+1; k<=m; ++k)
                    x[j]-=x[k]*mat[i][k];
                break;
            }
    cout.precision(8);
    for(i=1; i<=m; ++i)
        cout<<fixed<<x[i]<<' ';
	return 0;
}