Cod sursa(job #1244251)

Utilizator dobrebogdanDobre Bogdan Mihai dobrebogdan Data 16 octombrie 2014 22:59:43
Problema Algoritmul lui Gauss Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.85 kb
#include<cstdio>
#include<cmath>
#define eps 1.e-4
double a[310][310],sl[310],b[310][310];
int po[310];
int main()
{
    freopen("gauss.in","r",stdin);
    freopen("gauss.out","w",stdout);
    int n,m,i,j,x;
    bool te=1;
    double amp,tm;
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
    {
     for(j=1;j<=m+1;j++)
     {
      scanf("%lf",&a[i][j]);
      b[i][j]=a[i][j];
     }
    po[i]=i;
    }
    for(i=m;i>=1;i--)
    {
        for(j=i-1;j>=0;j--)
        if(fabs(a[po[j]][i])>=eps)
        {
            x=po[i];
            po[i]=po[j];
            po[j]=x;
            break;
        }
        if(j<0)
        for(j=m+1;j<=n;j++)
         if(fabs(a[po[j]][i])>=eps)
        {
            x=po[i];
            po[i]=po[j];
            po[j]=x;
            break;
        }
        for(j=i-1;j>=0;j--)
         if(fabs(a[po[j]][i])>=eps)
        {
            amp=a[po[j]][i]/a[po[i]][i];
            for(x=1;x<=m+1;x++)
                a[po[j]][x]=a[po[j]][x]-a[po[i]][x]*amp;
        }
        for(j=m+1;j<=n;j++)
        if(fabs(a[po[j]][i])>=eps)
        {
            amp=a[po[j]][i]/a[po[i]][i];
            for(x=1;x<=m+1;x++)
                a[po[j]][x]=a[po[j]][x]-a[po[i]][x]*amp;
        }
    }
    for(i=2;i<=m;i++)
        for(j=i-1;j>=1;j--)
    {
        amp=a[po[i]][j]/a[po[j]][j];
        a[po[i]][j]=0;
        a[po[i]][m+1]=a[po[i]][m+1]-a[po[j]][m+1]*amp;
    }
     for(i=1;i<=m;i++)
    {

    sl[i]=a[po[i]][m+1]/a[po[i]][i];
    }
    for(i=1;i<=n;i++)
    {
        tm=0;
    for(j=1;j<=m;j++)
    {
        tm=tm+sl[j]*b[i][j];
    }
    if(fabs(tm-b[i][m+1])>eps)
    {
        printf("%lf \n",tm-b[i][m+1]);
    te=0;
    }
    }
    if(te==0)
        printf("Imposibil\n");
    else
    {
    for(i=1;i<=m;i++)
        printf("%lf ",sl[i]);
    }
    return 0;
}