Cod sursa(job #1122031)

Utilizator costyv87Vlad Costin costyv87 Data 25 februarie 2014 15:28:03
Problema Algoritmul lui Gauss Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.49 kb
#include <cstdio>
#include <algorithm>
using namespace std;
FILE *f,*g;

double a[310][310];
double ans[310];
int n,m,i,j,k,w;
double er =0.001;
bool ok;

int main()
{
    f=fopen("gauss.in","r");
    g=fopen("gauss.out","w");

    fscanf(f,"%d%d",&n,&m);

    for (i=1;i<=n;i++)
        for (j=1;j<=m+1;j++)
            fscanf(f,"%lf",&a[i][j]);

    for (i=1,j=1;i <=n && j<=m;)
    {
        ok=false;
        for (k=i;k<=n;k++)
            if (a[k][j]<-er || er<a[k][j])
            {
                ok=true;
                break;
            }

        if (ok==false)
        {
            j++;
            continue;
        }

        for (w=1;w<=m+1;w++)
            swap( a[i][w],a[k][w]);
        for (w=m+1;w>=j;w--)
            a[i][w]=(double)a[i][w]/a[i][j];
        for (k=i+1;k<=n;k++)
            for (w=m+1;w>=j;w--)
                a[k][w]=(double)a[k][w]- ( (double)a[k][j]*a[i][w]);
        i++; j++;
    }


    for (i=n;i>=1;i--)
        for (j=1;j<=m+1;j++)
            if (a[i][j] <-er || er<a[i][j])
            {
                if (j==m+1)
                {
                    fprintf(g,"Imposibil");
                    return 0;
                }

                for (k=j+1;k<=m;k++)
                    ans[j]=(double) ans[j]-( (double)ans[k]*a[i][k]);
                ans[j]=(double)ans[j]+a[i][m+1];
                    break;
            }

    for (i=1;i<=m;i++)
        fprintf(g,"%.8lf ",ans[i]);

    return 0;

}