Cod sursa(job #1743751)

Utilizator Bodo171Bogdan Pop Bodo171 Data 18 august 2016 17:39:45
Problema Algoritmul lui Gauss Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.55 kb
#include <iostream>
#include<fstream>
#include<iomanip>
#define eps 0.0000000001
using namespace std;
double a[305][305],ans[305];
int n,m,ind,i,j,idx,k;
bool ok;
int main()
{
    ifstream f("gauss.in");
    ofstream g("gauss.out");
    f>>n>>m;
    for(i=1;i<=n;i++)
        for(j=1;j<=m+1;j++)
          f>>a[i][j];
    i=1;j=1;
    while(i<=n&&j<=m)
    {
        k=i;
        while(a[k][j]<eps&&a[k][j]>-eps&&k<=n)
            k++;
        if(k==n+1)
        {
            j++;
            continue;
        }
        if(k!=i)
        {
            for(ind=j;ind<=m+1;ind++)
                swap(a[i][ind],a[k][ind]);
        }
        for(ind=j+1;ind<=m+1;ind++)
            a[i][ind]/=a[i][j];
        a[i][j]=1;
        for(idx=i+1;idx<=n;idx++)
        {
            for(ind=j+1;ind<=m+1;ind++)
            {
                a[idx][ind]-=a[idx][j]*a[i][ind];
            }
            a[idx][j]=0;
        }
        i++,j++;
    }
    k=m;
    for(i=n;i>=1;i--)
    {
        ok=0;
        for(j=1;j<=m+1&&ok==0;j++)
        {
            if(a[i][j]<-eps||a[i][j]>eps)
            {
                if(j==m+1)
                {
                    g<<"Imposibil";
                    return 0;
                }
                ans[j]=a[i][m+1];
                for(ind=m;ind>=j+1;ind--)
                {
                    ans[j]-=ans[ind]*a[i][ind];
                }
                ok=1;
            }
        }
    }
    for(i=1;i<=m;i++)
        g<<fixed<<setprecision(10)<<ans[i]<<' ';
    return 0;
}