Pagini recente » Borderou de evaluare (job #1035944) | Borderou de evaluare (job #3343355) | Cod sursa (job #3364909) | Cod sursa (job #3364910) | Cod sursa (job #3364912)
#include <bits/stdc++.h>
using namespace std;
using ld = long double;
const ld eps = 1e-6;
ld a[305][305], rasp[305];
bool fin[305];
signed main() {
ifstream cin("gauss.in");
ofstream cout("gauss.out");
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i ++) {
for (int j = 0; j <= m; j ++) {
cin >> a[i][j];
}
}
for (int i = 0; i < n; i ++) {
int eu = m;
for (int j = 0; j < m; j ++) {
if (abs(a[i][j]) > eps) {
eu = j;
break;
}
}
if (eu == m) {
if (abs(a[i][m]) > eps) {
cout << "Imposibil\n";
return 0;
}
continue;
}
for (int j = i + 1; j < n; j ++) {
for (int k = m; k >= 0; k --) {
a[j][k] -= a[j][eu] / a[i][eu] * a[i][k];
}
}
}
for (int i = n - 1; i >= 0; i --) {
vector<int> nenule;
for (int j = 0; j < m; j ++) {
if (fin[j]) {
a[i][m] -= rasp[j] * a[i][j];
a[i][j] = 0;
} else if (abs(a[i][j]) > eps) {
nenule.push_back(j);
}
}
if (nenule.empty()) continue;
rasp[nenule[0]] = a[i][m] / a[i][nenule[0]];
for (auto i : nenule) fin[i] = true;
}
cout << fixed << setprecision(8);
for (int i = 0; i < m; i ++) cout << rasp[i] << " ";
cout << '\n';
}