Pagini recente » Cod sursa (job #1212004) | Cod sursa (job #450886) | Cod sursa (job #1077980) | Cod sursa (job #433446) | Cod sursa (job #1652251)
#include<cstdio>
using namespace std;
FILE *fin = fopen( "gauss.in", "r" ), *fout = fopen( "gauss.out", "w" );
const int nmax = 300;
const int mmax = 300;
const double eps = 1e-7;
int n, m;
double ans[ mmax + 1 ];
double a[ nmax + 1 ][ mmax + 2 ];
void schimba( int x, int y ) {
for( int i = 1; i <= m + 1; ++ i ) {
double aux = a[ x ][ i ];
a[ x ][ i ] = a[ y ][ i ];
a[ y ][ i ] = aux;
}
}
void simplifica( int x, int y ) {
for( int i = x + 1; i <= n; ++ i ) {
double k = a[ i ][ y ];
for( int j = 1; j <= m + 1; ++ j ) {
a[ i ][ j ] -= a[ x ][ j ] * k;
}
}
}
int main() {
fscanf( fin, "%d%d", &n, &m );
for( int i = 1; i <= n; ++ i ) {
for( int j = 1; j <= m + 1; ++ j ) {
fscanf( fin, "%lf", &a[ i ][ j ] );
}
}
int ind = 1;
for( int i = 1; i <= n; ++ i ) {
int x;
while( ind <= m ) {
x = i;
while ( x <= n && a[ x ][ ind ] < eps && -eps < a[ x ][ ind ] ) {
++ x;
}
if ( x <= n ) {
break;
}
++ ind;
}
if ( ind <= m ) {
schimba( i, x );
for( int j = m + 1; j >= ind; -- j ) {
a[ i ][ j ] /= a[ i ][ ind ];
}
simplifica( i, ind );
++ ind;
} else {
break;
}
}
bool ok;
for( int i = n; i > 0; -- i ) {
ok = 0;
for( int j = 1; j <= m; ++ j ) {
if ( a[ i ][ j ] > eps || a[ i ][ j ] < -eps ) {
ok = 1;
ans[ j ] = a[ i ][ m + 1 ];
for( int k = j + 1; k <= m; ++ k ) {
ans[ j ] -= a[ i ][ k ] * ans[ k ];
}
break;
}
}
if ( ok == 0 && (a[ i ][ m + 1 ] > eps || a[ i ][ m + 1 ] < -eps) ) {
break;
}
}
if ( ok == 1 ) {
for( int i = 1; i <= m; ++ i ) {
fprintf( fout, "%.10lf ", ans[ i ] );
}
} else {
fprintf( fout, "Imposibil\n" );
}
fclose( fin );
fclose( fout );
return 0;
}