Pagini recente » Cod sursa (job #2238920) | Cod sursa (job #2694428) | Cod sursa (job #2885657) | Cod sursa (job #2862502) | Cod sursa (job #658418)
Cod sursa(job #658418)
#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 + 1 && !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 ;
}