Pagini recente » Cod sursa (job #2711379) | Cod sursa (job #1721139) | Cod sursa (job #2709778) | Cod sursa (job #2334781) | Cod sursa (job #658446)
Cod sursa(job #658446)
#include<stdio.h>
#define Nmax 310
#define EPS 0.000001
#define zero(x) ( -EPS < x ) && ( x < EPS )
double A[Nmax][Nmax], Sol[Nmax] ;
int N, M, i, j, k, l ;
void swap ( int x, int y )
{
double aux ;
for( int i = 1 ; i <= M + 1 ; 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 && zero(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++ )
{
for( l = j+1 ; l <= M+1 ; l++ )
A[k][l] -= A[i][l] * A[k][j] ;
A[k][j] = 0 ;
}
i++;
}
for( i = N ; i ; i-- )
{
for( j = 1 ; j <= M+1 && zero(A[i][j]) ; j++ ) ;
if( j == M + 1 ) { printf("Imposibil") ; return 0 ; }
if( j == M + 2 ) continue ;
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("%.8lf ",Sol[i]);
return 0 ;
}