Cod sursa(job #658411)

Utilizator jeanFMI - Petcu Ion Cristian jean Data 8 ianuarie 2012 20:19:23
Problema Algoritmul lui Gauss Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include<stdio.h>
#define Nmax 310

double A[Nmax][Nmax], Sol[Nmax], C ;
int N, M, i, j, k, l ;

void swap ( int x, int y ) 
{
	double aux ;
	
	for( int i = 1 ; i <= M ; i++ ) 
		aux = A[x][i], A[x][i] = A[y][i], A[y][i] = aux ; 
}

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]);
	
	
	for( i = j = 1 ; i <= N && j <= M ; j++ )
	{
		for( k = i ; k <= N && !A[k][j] ; k++ ) ;
		if( k > N ) continue ; 
		
		swap(i,k) ; 
		
		for( k = j+1 ; k <= M+1 ; k++ )
			A[i][k] /= A[i][j] ; 
		A[i][j] = 1 ;
		
		for( k = i + 1 ; k <= N ; k++ )
		{
			C = A[k][j] / A[i][j] ; 
			for( l = j ; l <= M+1 ; l++ )
				A[k][l] -= A[i][l] * C ; 
		}			
		
		i++; 
	}
	
	for( i = N ; i ; i-- )
	{
		for( j = 1 ; j <= M && !A[i][j] ; j++ ) ; 
		if( j == M + 1 ) { printf("Imposibil") ; return 0 ; } 
		
		for( k = j + 1 ; k <= M ; k++ )
			A[i][M+1] -= A[i][k] * Sol[k] ;
		
		Sol[j] = A[i][M+1] ; 
	}
	
	for( i = 1 ; i <= M ; i++ ) 
		printf("%lf ",Sol[i]);
	
	return 0 ; 
}