Pagini recente » Cod sursa (job #2543752) | Cod sursa (job #1148130) | Cod sursa (job #2717472) | Cod sursa (job #1605809) | Cod sursa (job #623547)
Cod sursa(job #623547)
#include <cstdio>
#define NMAX 310
#define Err 1e-7
using namespace std;
double A[NMAX][NMAX], Sol[NMAX], x;
int N, M, i, j, k, l;
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]);
i = j = 1;
while( i <= N && j <= M )
{
for( k = i; k <= N; ++k )
if( A[k][j] > Err || A[k][j] < -Err )
break;
if( k == N+1 )
{
++j;
continue;
}
if( k != i )
for( int ii = 1; ii <= M+1; ++ii )
x = A[i][ii], A[i][ii] = A[k][ii], A[k][ii] = x;
for( k = j+1; k <= M+1; ++k )
A[i][k] = A[i][k] / A[i][j];
A[i][j] = 1.0;
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.0;
}
++i, ++j;
}
for( i = N; i >= 1; --i )
for( j = 1; j <= M+1; ++j )
if( A[i][j] > Err || A[i][j] < -Err )
{
if( j == M+1 )
{
printf("Imposibil\n");
return 0;
}
Sol[j] = A[i][M+1];
for( k = j+1; k <= M; ++k )
Sol[j] -= A[i][k] * Sol[k];
break;
}
for( i = 1; i <= M; ++i )
printf("%.8lf ", Sol[i]);
printf("\n");
return 0;
}