Cod sursa(job #1706516)

Utilizator refugiatBoni Daniel Stefan refugiat Data 22 mai 2016 18:39:11
Problema Algoritmul lui Gauss Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 2.01 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(k=1;k<=n;++k)
        {
            for(l=1;l<=m;++l)
                cout<<v[k][l]<<' ';
            cout<<'\n';
        }
        cout<<'\n'; */
    for(;i<=n&&j<m;j++)
    {
        for(k=i;k<=n;++k)
        {
            if(v[k][j]>VMIN||-v[k][j]>VMIN)
                break;
        }
        if(k==n+1)
        {
            continue;
        }
        swap(v[i],v[k]);
        for(k=j+1;k<=m;++k)
        {
            v[i][k]/=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][j]*v[i][l];
            }
            v[k][j]=0;
        }
/*
        for(k=1;k<=n;++k)
        {
            for(l=1;l<=m;++l)
                cout<<v[k][l]<<' ';
            cout<<'\n';
        }
        */
        ++i;
        //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;
        }
        sol[j]=v[i][m];
        for(k=j+1;k<m;++k)
        {
            sol[j]=sol[j]-v[i][k]*sol[k];
        }
    }
    if(bun)
    {
        for(i=1;i<m;++i)

            fprintf(so,"%.10f ",sol[i]);
            //cout<<sol[i]<<' ';
        fprintf(so,"\n");
        //cout<<'\n';
    }
    else
    {
        fprintf(so,"Imposibil\n");
        //cout<<"Imposibil\n";
    }
    return 0;
}