Cod sursa(job #623566)

Utilizator theodora_maneaManea Theodora Maria theodora_manea Data 20 octombrie 2011 11:16:30
Problema Algoritmul lui Gauss Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <stdio.h>

#define max_n 301
#define eps 0.0000001

using namespace std;

int n,m,i,j,t,k;
double z;
double a[max_n][max_n];
double v[max_n];

void swap(int i,int k) {
	double aux;
	for (t=1; t<=m; t++) {
		aux=a[i][t];
		a[i][t]=a[k][t];
		a[k][t]=aux;
	}
}


void matrice() {
	i=j=1;
	
	while (i<=n && j<=m) {
		for (k=i; k<=m; k++) 
			if (a[i][j]>eps || a[i][j]<-eps) 
				break;
	    if (k==m+1) continue;
		if (k!=i) {
			double aux;
	for (t=1; t<=m; t++) {
		aux=a[i][t];
		a[i][t]=a[k][t];
		a[k][t]=aux;
	}
		}
		
		for (k=j+1; k<=m; k++) 
			a[i][k]=a[i][k]/a[i][j];
		a[i][j]=1;
		
		for (t=i+1; t<=n; t++)  {
			z=a[t][j];
	        for (k=j; k<=m; k++) 
				a[t][k]-=a[i][k]*z;
		}
			
		i++;
		j++;
	}
}

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("%lf",&a[i][j]);
	
	m++;
	matrice();
	
	for (i=n; i>=1; i--) 
		for (j=1; j<=m; j++) 
			if (a[i][j]>eps || a[i][j]<-eps) {
                if (j==m) {
                    printf("Imposibil\n");
					return 0;
				}
				v[j]=a[i][m];
				for (k=j+1; k<=m; k++) 
					v[j]-=v[k]*a[i][k];
				break;
			}
	for (i=1; i<m; i++) 
		printf("%.8lf ",v[i]);
	return 0;
}