Cod sursa(job #1388351)

Utilizator VictoriaNevTascau Victoria VictoriaNev Data 15 martie 2015 13:36:50
Problema Algoritmul lui Gauss Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.4 kb
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
const int NMAX=302;
const double eps=0.0000000001;
int i, j, n, m, k, l, p;
double a[NMAX][NMAX], x[NMAX];
int main()
{
    ifstream cin("gauss.in");
    ofstream cout("gauss.out");
    cin>>n>>m;
    for(i=1; i<=n; i++)
        for(j=1; j<=m+1; j++)
            cin>>a[i][j];
    i=1;
    j=1;
    while(i<=n&&j<=m)
    {
        for(k=i; k<=n; k++)
            if(a[k][j]<-eps||a[j][k]>eps)
                break;

        if(k==n+1)
        {
            j++;
            continue;
        }

        if(k!=i)
            for(l=1; l<=m+1; l++)
                swap(a[i][l],a[k][l]);

        for(l=j+1; l<=m+1; l++)
            a[i][l]=a[i][l]/a[i][j];
        a[i][j]=1;
        for(p=i+1; p<=n; p++)
        {
            for(l=j+1; l<=m+1; l++)
                a[p][l]-=a[p][j]*a[i][l];
            a[p][j]=0;
        }
        i++;
        j++;
    }

    for(i=n; i>0; i--)
        for(j=1; j<=m+1; j++)
            if(a[i][j]>eps||a[i][j]<-eps)
            {
                if(j==m+1)
                {
                    cout<<"Imposibil\n";
                    return 0;
                }
                x[j]=a[i][m+1];
                for(k=j+1; k<=m; k++)
                    x[j]-=x[k]*a[i][k];

                break;
            }
    for(i=1; i<=m; i++)
        cout<<setprecision(10)<<fixed<<x[i]<<' ';
    cout<<'\n';
    return 0;
}