Pagini recente » Cod sursa (job #2114970) | Cod sursa (job #2527169) | Cod sursa (job #562310) | Cod sursa (job #1368297) | Cod sursa (job #2827597)
#include <iostream>
#include <iomanip>
using namespace std;
double** readSystem(int n, int m) {
auto sys = new double*[n];
for (int i = 0; i < n; ++i)
sys[i] = new double[m + 1];
for (int i = 0; i < n; ++i)
for (int j = 0; j <= m; ++j)
cin >> sys[i][j];
return sys;
}
void multiplyLine(int m, double* line, double multiplier) {
for (int i = 0; i <= m; ++i) {
line[i] *= multiplier;
if (line[i] == -0)
line[i] = 0;
}
}
void addLine(int m, double* line1, const double* line2, double multiplier) {
for (int i = 0; i <= m; ++i)
line1[i] += line2[i] * multiplier;
}
void printSystem(int n, int m, double** sys) {
for (int i = 0; i < n; ++i) {
for (int j = 0; j <= m; ++j)
cout << sys[i][j] << ' ';
cout << '\n';
}
cout << '\n';
}
void solveSystem(int n, int m, double** sys) {
multiplyLine(m, sys[0], (double)1/sys[0][0]);
//printSystem(n, m, sys);
for (int i = 1; i < n; ++i) {
for (int j = 1; j <= i; ++j) {
addLine(m, sys[i], sys[j - 1], -sys[i][j-1]);
//printSystem(n, m, sys);
}
multiplyLine(m, sys[i], 1/sys[i][i]);
//printSystem(n, m, sys);
}
}
void printSolution(int n, int m, double** sys) {
auto sol = new double[n];
for (int i = n-1; i >= 0; --i) {
sol[i] = sys[i][m];
for (int j = i+1; j < m; ++j)
sol[i] -= sys[i][j]*sol[j];
}
for (int i = 0; i < n; ++i)
cout << fixed << setprecision(10) << sol[i] << ' ';
delete[] sol;
}
int main() {
int n, m;
cin >> n >> m;
double** sys = readSystem(n, m);
solveSystem(n, m, sys);
printSolution(n, m, sys);
return 0;
}