Pagini recente » Cod sursa (job #1892982) | Cod sursa (job #554422) | Cod sursa (job #3163825) | Cod sursa (job #3135288) | Cod sursa (job #1450804)
#include <cstdio>
#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 main(){
int N, M;
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 ){
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 ){
if ( a[i][i] > -eps && a[i][i] < eps )
continue;
bool onlyZero = 1;
for ( int j = 1; j <= M; ++j ){
if ( a[i][j] < -eps || a[i][j] > eps ){
onlyZero = 0;
break;
}
}
if ( onlyZero && ( a[i][M+1] < -eps || a[i][M+1] > eps ) ){
fprintf ( g, "Imposibil" );
return 0;
}
double rez = a[i][M+1];
for ( int j = M; j > i; --j )
rez = rez - sol[j] * a[i][j];
sol[i] = rez;
}
for ( int i = 1; i <= M; ++i )
fprintf ( g, "%.8lf ", sol[i] );
return 0;
}