Pagini recente » Cod sursa (job #629299) | Cod sursa (job #1963999) | Cod sursa (job #1182515) | Cod sursa (job #450998) | Cod sursa (job #831403)
Cod sursa(job #831403)
#include <fstream>
#include <iomanip>
#include <iostream>
#include <vector>
using namespace std;
const double eps = 1e-9;
int N, M;
int main() {
ifstream cin("gauss.in");
ofstream cout("gauss.out");
cin >> N >> M;
vector<vector<double> > A(N + 1, vector<double> (M + 2, 0));
vector<double> X(M + 2, 0);
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= M + 1; j++) {
cin >> A[i][j];
}
}
int i = 1, j = 1, k;
while (i <= N && j <= M) {
for (k = i; k <= N; k++) {
if (A[k][j] < -eps || eps < A[k][j]) {
break;
}
}
if (k == N + 1) {
j++;
continue;
}
if (k != i) {
swap(A[i], A[k]);
}
for (int l = j + 1; l <= M + 1; l++) {
A[i][l] = A[i][l] / A[i][j];
}
A[i][j] = 1;
for (int u = i + 1; u <= N; ++u) {
for (int l = j + 1; l <= M + 1; l++) {
A[u][l] -= A[u][j] * A[i][l];
}
A[u][j] = 0;
}
i++;
j++;
}
for (int i = N; i > 0; i--) {
for (int j = 1; j <= M + 1; j++) {
if (A[i][j] < -eps || eps < A[i][j]) {
if (j == M + 1) {
cout<<"Imposibil";
return 0;
}
X[j] = A[i][M + 1];
for (int k = j + 1; k <= M; k++) {
X[j] -= X[k] * A[i][k];
}
break;
}
}
}
for (int i = 1; i <= M; i++) {
cout << fixed << setprecision(8) << X[i] << " ";
}
return 0;
}