Pagini recente » Cod sursa (job #491268) | Cod sursa (job #1940210) | Cod sursa (job #1770933) | Cod sursa (job #671244) | Cod sursa (job #2829607)
#include <cstdio>
#define MAX 301
#define E 0.001
double a[ MAX + 1 ][ MAX + 1 ];
double v[ MAX + 1 ], y;
int n, m;
int main ()
{
int i, j;
FILE *fin = fopen( "gauss.in", "r" );
fscanf( fin, "%d%d", &n, &m );
for( i = 1; i <= n; ++i )
for( j = 1; j <= m + 1; ++j )
fscanf( fin, "%lf", &a[ i ][ j ] );
fclose( fin );
for( j = 1; j <= m; ++j ) {
for( i = j; i <= n; ++i )
if( a[ i ][ j ] > E || a[ i ][ j ] < -E )
break;
if( i <= n ) {
if( i != j )
for( int k = 1; k <= m + 1; ++k ) {
y = a[ i ][ k ];
a[ i ][ k ] = a[ j ][ k ];
a[ j ][ k ] = y;
}
for( int k = j + 1; k <= m + 1; ++k )
a[ j ][ k ] /= a[ j ][ j ];
a[ j ][ j ] = 1;
for( int k = j + 1; k <= n; a[ k ][ j ] = 0, ++k )
for( int l = j + 1; l <= m + 1; ++l )
a[ k ][ l ] -= a[ j ][ l ] * a[ k ][ j ];
}
}
FILE *fout = fopen( "gauss.out", "w" );
for( i = n; i > 0; --i )
for( j = 1; j <= m + 1; ++j )
if( a[ i ][ j ] > E || a[ i ][ j ] < -E ) {
if( j == m + 1 ) {
fprintf( fout, "Imposibil" );
return 0;
}
v[ j ] = a[ i ][ m + 1 ];
for( int k = j + 1; k <= m; ++k )
v[ j ] -= v[ k ] * a[ i ][ k ];
break;
}
for( i = 1; i <= m; ++i )
fprintf( fout, "%.9lf ", v[ i ] );
fclose( fout );
return 0;
}