Pagini recente » Cod sursa (job #3244217) | Cod sursa (job #2053822) | Cod sursa (job #313301) | Cod sursa (job #197719) | Cod sursa (job #1165165)
#include <cmath>
#include <fstream>
#include <iomanip>
#include <vector>
#include <algorithm>
using namespace std;
const double EPS = 1e-8;
int N, M;
vector< vector<double> > A;
vector<double> Solution;
bool Compatible;
vector<double> Gauss(vector< vector<double> > a, bool &compatible) {
int n = int(a.size()), m = int(a[0].size()) - 1;
for (int i = 0, j = 0; i < n && j < m; ++i, ++j) {
int k = i;
for (; abs(a[k][j]) < EPS; ++k);
if (k == n) {
--i;
continue;
}
swap(a[i], a[k]);
for (k = 0; k < n; ++k) {
if (i == k)
continue;
double ratio = a[k][j] / a[i][j];
for (int l = 0; l <= m; ++l)
a[k][l] -= a[i][l] * ratio;
a[k][j] = 0.0;
}
}
compatible = true;
vector<double> solution = vector<double>(m, 0.0);
for (int i = n - 1, j; i >= 0; --i) {
for (j = 0; j <= m && abs(a[i][j]) < EPS; ++j);
if (j == m) {
compatible = false;
return vector<double>(m, 0.0);
}
solution[j] = a[i][m] / a[i][j];
for (int k = 0; k < i; ++k) {
a[k][m] -= a[k][j] * solution[j];
a[k][j] = 0.0;
}
}
return solution;
}
void Solve() {
Solution = Gauss(A, Compatible);
}
void Read() {
ifstream cin("gauss.in");
cin >> N >> M;
A = vector< vector<double> >(N, vector<double>(M + 1, 0.0));
for (int i = 0; i < N; ++i)
for (int j = 0; j <= M; ++j)
cin >> A[i][j];
cin.close();
}
void Print() {
ofstream cout("gauss.out");
if (!Compatible) {
cout << "Imposibil\n";
} else {
for (int i = 0; i < M; ++i)
cout << fixed << setprecision(10) << Solution[i] << " ";
cout << "\n";
}
cout.close();
}
int main() {
Read();
Solve();
Print();
return 0;
}