Pagini recente » Cod sursa (job #1968937) | Cod sursa (job #2234891) | Cod sursa (job #2457837) | Cod sursa (job #21537) | Cod sursa (job #1479183)
#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];
for (int r = 1, c = 1; r <= N && c <= M; ++c) {
if (Zero(a[r][c])) {
int i = r + 1;
while (i <= N && Zero(a[i][c]))
++i;
if (i > N) 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++;
}
for (int i = row[M] + 1; i <= N; ++i)
if (!Zero(a[i][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;
}