Pagini recente » Cod sursa (job #2895823) | Cod sursa (job #1723762) | Cod sursa (job #1223168) | Cod sursa (job #2287000) | Cod sursa (job #2188405)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("gauss.in");
ofstream g ("gauss.out");
const double Eps = 1e-9;
double mat[ 550 ][ 550 ], ans[ 550 ];
int n, m;
int main() {
f >> n >> m;
for (int i = 1; i <= n; ++ i) {
for (int j = 1; j <= m + 1; ++ j) {
f >> mat[ i ][ j ];
}
}
int lin = 1, col = 1;
while (lin <= n && col <= m) {
bool ok = false;
int pos = 0;
for (int i = lin; i <= n; ++ i) {
if (mat[ i ][ col ] < -Eps || mat[ i ][ col ] > Eps) {
ok = true;
pos = i;
break;
}
}
if ( !ok ) {
++ col;
continue;
}
if (pos != lin) {
for (int i = 1; i <= m + 1; ++ i) {
swap (mat[ lin ][ i ], mat[ pos ][ i ]);
}
}
for (int i = col + 1; i <= m + 1; ++ i) {
mat[ lin ][ i ] /= mat[ lin ][ col ];
}
mat[ lin ][ col ] = 1;
for (int i = lin + 1; i <= n; ++ i) {
for (int j = col + 1; j <= m + 1; ++ j) {
mat[ i ][ j ] -= mat[ i ][ col ] * mat[ lin ][ j ];
}
mat[ i ][ col ] = 0;
}
++ lin, ++ col;
}
for (int i = n; i >= 1; -- i) {
for (int j = 1; j <= m + 1; ++ j) {
if ( mat[ i ][ j ] < -Eps || mat[ i ][ j ] > Eps ) {
if ( j == m + 1 ) {
g << "Imposibil\n";
return 0;
}
ans[ j ] = mat[ i ][ m + 1 ];
for (int k = j + 1; k <= m; ++ k) {
ans[ j ] -= mat[ i ][ k ] * ans[ k ];
}
break;
}
}
}
for (int i = 1; i <= m; ++ i) {
g << setprecision( 10 ) << fixed << ans[ i ] << " ";
}
return 0;
}