Cod sursa(job #609942)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 23 august 2011 22:02:36
Problema Algoritmul lui Gauss Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include<stdio.h>
#include<math.h>
#define N 302
int a[N][N],i,j,m,n,x,k,p[N],r,l;
double b[N][N],z,s,c[N],y;
int main()
{freopen("gauss.in","r",stdin);
freopen("gauss.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
for(j=1;j<=m+1;j++)
      scanf("%d",&a[i][j]),b[i][j]=a[i][j];
if(n<=m)
      r=n;
else
      r=m;
for(k=1;k<=r;k++)
      {y=fabs(b[k][k]);
      i=k;
      for(j=k+1;j<=n;j++)
      if(y<fabs(b[j][k]))
              y=fabs(b[j][k]),i=j;
      for(j=k;j<=m+1;j++)
              z=b[k][j],b[k][j]=b[i][j],b[i][j]=z;
      if(b[k][k])
              {for(j=k+1;j<=m+1;j++)
                     b[k][j]/=b[k][k];
              b[k][k]=1;
              for(i=k+1;i<=n;i++)
              for(j=k+1;j<=m+1;j++)
                     b[i][j]=b[i][j]-b[k][j]*b[i][k];
              for(i=k+1;i<=n;i++)
                     b[i][k]=0;}}
for(i=1;i<=n;i++)
      {k=0;
      for(j=m;j;j--)
      if(b[i][j])
             k=j;
      p[i]=k;}
for(i=n;i;i--)
      {s=0;
      for(j=p[i]+1;j<=m;j++)
              s=s+b[i][j]*c[j];
      c[p[i]]=b[i][m+1]-s;}
for(i=1;i<=n;i++)
      {s=0;
      for(j=1;j<=m;j++)
             s=s+a[i][j]*c[j];
      if(fabs(s-a[i][m+1])>0.001)
             l=1;}
if(!l)
      for(i=1;i<=m;i++)
             printf("%.8lf ",c[i]);
else
      printf("Imposibil");
return 0;}