Pagini recente » Cod sursa (job #1775835) | Cod sursa (job #2877185) | Cod sursa (job #2941121) | Cod sursa (job #1817470) | Cod sursa (job #1479185)
#include <fstream>
#include <iomanip>
using namespace std;
const int kMaxN = 300;
const double kEps = 1e-8;
ifstream fin("gauss.in");
ofstream fout("gauss.out");
int N, M;
double a[kMaxN + 5][kMaxN + 5];
int row[kMaxN];
double sol[kMaxN];
bool Zero(double d) {
return (d > -kEps) && (d < kEps);
}
int main() {
fin >> N >> M;
for (int i = 1; i <= N; ++i)
for (int j = 1; j <= M + 1; ++j)
fin >> a[i][j];
int r = 1, c = 1;
while (r <= N && c <= M) {
if (Zero(a[r][c])) {
int i = r + 1;
while (i <= N && Zero(a[i][c]))
++i;
if (i > N) {
++c;
continue;
}
swap(a[r], a[i]);
}
for (int i = 1; i <= N; ++i) {
if (i == r) continue;
double k = a[i][c] / a[r][c];
for (int j = 1; j <= M + 1; ++j)
a[i][j] -= k * a[r][j];
}
row[c++] = r++;
}
if (c > M)
for (; r <= N; ++r)
if (!Zero(a[r][M + 1])) {
fout << "Imposibil\n";
return 0;
}
fout << setprecision(10) << fixed;
for (int i = 1; i <= M; ++i)
fout << (row[i] ? (a[row[i]][M + 1] / a[row[i]][i]) : 0.0) << " ";
fout << "\n";
return 0;
}