Pagini recente » Cod sursa (job #2807924) | Cod sursa (job #2574199) | Cod sursa (job #2714872) | Cod sursa (job #1921580) | Cod sursa (job #1450819)
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;
#define Nmax 302
#define eps 1e-10
FILE *f = fopen ( "gauss.in", "r" );
FILE *g = fopen ( "gauss.out", "w" );
double a[Nmax][Nmax], sol[Nmax];
int N, M;
void swapline ( int x, int y ){
for ( int i = 1; i <= M+1; ++i )
swap ( a[x][i], a[y][i] );
}
int main(){
fscanf ( f, "%d%d", &N, &M );
for ( int i = 1; i <= N; ++i )
for ( int j = 1; j <= M+1; ++j )
fscanf ( f, "%lf", &a[i][j] );
for ( int i = 1; i <= N; ++i ){
bool swapped = 0;
for ( int j = i; j <= N; ++j ){
if ( fabs( a[j][i] ) > eps ){
swapline ( i, j );
swapped = 1;
break;
}
}
if ( !swapped )
continue;
double imp = a[i][i];
for ( int j = i; j <= M+1; ++j )
a[i][j] /= imp;
for ( int j = i+1; j <= N; ++j ){
imp = a[j][i];
for ( int k = i; k <= M+1; ++k )
a[j][k] = a[j][k] - ( a[i][k] * imp );
}
}
for ( int i = N; i >= 1; --i ){
double rez = a[i][M+1];
for ( int j = M; j > i; --j )
rez -= sol[j] * a[i][j];
sol[i] = rez;
}
for ( int i = 1; i <= N; ++i ){
double rez = 0;
for ( int j = 1; j <= M; ++j )
rez += a[i][j] * sol[j];
if ( fabs( rez - a[i][M+1] ) > eps ){
fprintf ( g, "Imposibil" );
return 0;
}
}
for ( int i = 1; i <= M; ++i )
fprintf ( g, "%.10lf ", sol[i] );
return 0;
}