Cod sursa(job #1244639)

Utilizator dobrebogdanDobre Bogdan Mihai dobrebogdan Data 17 octombrie 2014 21:51:30
Problema Algoritmul lui Gauss Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.4 kb
#include<cstdio>
#include<cmath>
#define eps 0.0000001
double a[310][310],sp[310];
int po[310];
int main()
{
    freopen("gauss.in","r",stdin);
    freopen("gauss.out","w",stdout);
    int n,m,i,j,k,y,x;
    bool te=1;
    double amp;
    scanf("%d%d",&n,&m);
    m++;
    for(i=1;i<=n;i++)
    {
     for(j=1;j<=m;j++)
      scanf("%lf",&a[i][j]);
    po[i]=i;
    }
    for(i=1;i<m;i++)
    {
        for(j=i+1;j<=n;j++)
        if(fabs(a[po[j]][i])>=eps)
        {
            y=po[i];
            po[i]=po[j];
            po[j]=y;
            break;
        }
        if(fabs(a[po[i]][i])>=eps)
        {
        for(j=i+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;x++)
                a[po[j]][x]=a[po[j]][x]-a[po[i]][x]*amp;
        }
        }
    }
    for(i = n; i>0; --i)
        for(j = 1; j <= m; ++j)
            if(a[po[i]][j]>eps || a[po[i]][j]<-eps)
            {
                if(j == m)
                {
                    printf("Imposibil\n");
                    return 0;
                }
                sp[j] = a[po[i]][m];
                for(k = j+1; k < m; ++k)
                    sp[j] -= sp[k] * a[po[i]][k];
                sp[j]=sp[j]/a[po[i]][j];
                break;
            }
    for(i=1;i<m;i++)
        printf("%lf ",sp[i]);
    return 0;
}