Cod sursa(job #1706724)

Utilizator refugiatBoni Daniel Stefan refugiat Data 23 mai 2016 07:27:33
Problema Algoritmul lui Gauss Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.63 kb
#include <iostream>
//#include <fstream>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
//ifstream si("gauss.in");
//ofstream so("gauss.out");
FILE* si=fopen("gauss.in","r");
FILE* so=fopen("gauss.out","w");
const double VMIN=0.00000000001;
double v[305][305];
double sol[305];
int main()
{
    int n,m;
    //si>>n>>m;
    fscanf(si,"%i %i",&n,&m);
    ++m;
    int i,j;
    for(i=1;i<=n;++i)
        for(j=1;j<=m;++j)
            fscanf(si,"%lf",&v[i][j]);
    int k,l;
    i=1;
    j=1;
    for(;i<=n&&j<m;++j)
    {
        for(k=i;k<=n&&!(v[k][j]>VMIN||-v[k][j]>VMIN);++k);
        if(k==n+1)
            continue;
        swap(v[i],v[k]);
        for(l=j+1;l<=m;++l)
            v[i][l]=v[i][l]/v[i][j];
        v[i][j]=1;
        for(k=i+1;k<=n;++k)
        {
            for(l=j+1;l<=m;++l)
                v[k][l]=v[k][l]-v[i][l]*v[k][j];
            v[k][j]=0;
        }
        ++i;
    }
    /*for(i=1;i<=n;++i)
    {
        for(j=1;j<=m;++j)
            cout<<v[i][j]<<' ';
        cout<<'\n';
    }*/
    bool bun=true;
    for(i=n;i&&bun;--i)
    {
        for(j=1;j<=m&&!(v[i][j]>VMIN||-v[i][j]>VMIN);++j);
        if(j==m)
        {
            bun=false;
            break;
        }
        //cout<<i<<"->"<<j<<'\n';
        sol[j]=v[i][m];
        for(k=j+1;k<m;++k)
        {
            sol[j]-=sol[k]*v[i][k];
        }
    }
    if(bun)
    {
        for(i=1;i<m;++i)
        {
            fprintf(so,"%.10f ",sol[i]);
        }
        fprintf(so,"\n");
    }
    else
    {
        fprintf(so,"Imposibil\n");
    }
    return 0;
}