Pagini recente » Cod sursa (job #3176387) | Cod sursa (job #1677019) | Cod sursa (job #1812015) | Cod sursa (job #735916) | Cod sursa (job #1083119)
#include <cstdio>
#include <cmath>
using namespace std;
const int NMAX = 305;
int N, M;
double matrix[NMAX][NMAX];
double solution[NMAX];
void read() {
freopen( "gauss.in", "r", stdin );
freopen( "gauss.out", "w", stdout );
scanf("%i %i", &N, &M);
for( int i = 1; i <= N; i++ )
for( int j = 1; j <= M + 1; j++ )
scanf("%lf", &matrix[i][j]);
}
void reduce(int k) {
bool ok;
int p = -1;
for( int i = 1; i <= N; i++ ) {
ok = true;
for( int j = 1; j < k; j++ )
if( abs(matrix[i][j]) > 0.0000000001 ) {
ok = false;
}
if( abs(matrix[i][k]) < 0.0000000001 )
ok = false;
if( ok ) {
p = i;
break;
}
}
if ( ok ) {
for( int i = 1; i <= N; i++ )
if( i != p ) {
double coeff = matrix[i][k] / matrix[p][k];
for( int j = 1; j <= M + 1; j++ )
matrix[i][j] -= (matrix[p][j] * coeff);
}
reduce(k + 1);
}
}
void printSolution() {
bool ok, sol = true;
for( int i = 1; i <= N; i++ ) {
ok = false;
for( int j = 1; j <= M; j++ )
if( abs(matrix[i][j]) > 0.0000000001 ) {
solution[j] = matrix[i][M + 1] / matrix[i][j];
ok = true;
break;
}
if ( !ok && abs(matrix[i][M+1]) > 0.0000000001 ) {
sol = false;
break;
}
}
if( sol ) {
for(int i = 1; i <= M; i++)
printf("%.10lf ", solution[i]);
} else {
printf("Imposibil!\n");
}
}
int main() {
read();
reduce(1);
printSolution();
printf("\n");
for(int i = 1; i <= N; i++) {
for(int j = 1; j <= M + 1; j++)
printf("%lf ", matrix[i][j]);
printf("\n");
}
return 0;
}