Cod sursa(job #1472464)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 17 august 2015 08:43:47
Problema Algoritmul lui Gauss Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.25 kb
#include<stdio.h>
#include<math.h>
int a[302][302],i,j,m,n,x,k,p[302],r,l;
double b[302][302],z,s,c[302],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];
	for(r=n<m?n:m,k=1;k<=r;k++) {
      	for(y=fabs(b[k][k]),i=k,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];
            for(b[k][k]=1,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++) {
      	for(k=0,j=m;j;j--)
      	if(b[i][j])
            k=j;
      	p[i]=k;
	}
	for(i=n;i;i--) {
      	for(s=0,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++) {
      	for(s=0,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");
}