Cod sursa(job #739477)

Utilizator dragosnicolaeNicolae Dragos dragosnicolae Data 23 aprilie 2012 10:30:22
Problema Algoritmul lui Gauss Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define p 0.00000001
double a[305][305],x[305],sw;
int n,m;
void cit(){
	FILE *f;
	int i,j;
	f=fopen("gauss.in","r");
	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]);
	fclose(f);
}
void afis(){
	FILE *f;
	f=fopen("gauss.out","w");
	if(sw)
		for(int i=1;i<=m;i++)
			fprintf(f,"%0.8lf ",x[i]);
	else
		fprintf(f,"Imposibil\n");
	fclose(f);
}
int main(){
	cit();
	int i,j,k,l;
	double aux;
	i=j=1;
	sw=1;
	while(i<=n&&j<=m){
		k=i;
		while(fabs(a[k][j])<p&&k<=n)
			k++;
		if(k==n+1){
			j++;
			continue;
		}
		if(k!=i)
			for(l=1;l<=m+1;l++){
				aux=a[i][l];
				a[i][l]=a[k][l];
				a[k][l]=aux;
			}
		for(l=j+1;l<=m+1;l++)
			a[i][l]/=a[i][j];
		a[i][j]=1;
		for(k=i+1;k<=m;k++){
			for(l=j+1;l<=m+1;l++)
				a[k][l]-=a[k][j]*a[i][l];
			a[k][j]=0;
		}
		i++;
		j++;
	}
	for(i=n;i>=1;i--){
		for(j=1;j<=m+1;j++)
			if(fabs(a[i][j])>p)
				break;
		if(j==m+1){
			sw=0;
			afis();
			return 0;
		}
		x[j]=a[i][m+1];
		for(k=j+1;k<=m;k++)
			x[j]-=x[k]*a[i][k];
	}
	afis();
	return 0;
}