Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <string>
- void cout(std::vector<std::vector<double>>& matrix) {
- for (int i = 0; i < matrix.size(); ++i) {
- for (int j = 0; j < matrix[i].size(); ++j) {
- std::cout << matrix[i][j] << ' ';
- }
- std::cout << "\n";
- }
- std::cout << "\n";
- }
- void dive(std::vector<std::vector<double>>& matrix, int i, int j) {
- if (i >= matrix.size()) return;
- if (matrix[i].size() <= j) return;
- if (matrix[i][j] == 0) {
- int i1 = i;
- while (i1 < matrix.size() && matrix[i1][j] == 0) {
- ++i1;
- }
- if (i1 >= matrix.size()) {
- dive(matrix, i, j + 1);
- return;
- }
- if (matrix[i1][j] == 0) {
- dive(matrix, i, j + 1);
- return;
- }
- std::swap(matrix[i], matrix[i1]);
- }
- for (int i1 = i + 1; i1 < matrix.size(); ++i1) {
- double k = matrix[i1][j] / matrix[i][j];
- for (int j1 = j; j1 < matrix[i1].size(); ++j1) {
- matrix[i1][j1] -= matrix[i][j1] * k;
- cout(matrix);
- }
- }
- dive(matrix, i + 1, j + 1);
- }
- int main() {
- int n, m;
- std::cin >> n >> m;
- std::vector<std::vector<double>> matrix(n, std::vector<double>(m));
- std::vector<std::string> ans;
- for (int i = 0; i < n; ++i) {
- for (int j = 0; j < m; ++j) {
- std::cin >> matrix[i][j];
- }
- }
- std::cout << "\n";
- dive(matrix, 0, 0);
- cout(matrix);
- for (int i = matrix.size() - 1; i >= 0; --i) {
- if (matrix[i][m - 1] == 0) continue;
- if (matrix[i][m - 2] == 0) {
- std::cout << "no roots";
- return 0;
- }
- else {
- char letters = 'a';
- int ind = 0;
- bool empt = false;
- for (int j = m - 2; j > 0 && i > 0; --j, ++ind) {
- if (matrix[i][j - 1] != 0) {
- std::string s;
- s.push_back(letters);
- ans.push_back(s);
- letters = (letters + 1 - 'a') % 27 + 'a';
- empt = true;
- continue;
- }
- else {
- if (empt) {
- std::string s;
- s = std::to_string(matrix[i][j]);
- for (int j1 = j + 1; j1 < m; ++j1) {
- if (matrix[i][j1] == 0) continue;
- s += " - ";
- if (matrix[i][j1] != 1) {
- std::string s1 = std::to_string(matrix[i][j1]);
- s += '(';
- s += s1;
- s += ')';
- s += '*';
- }
- s += '(';
- s += ans[ans.size() - j1];
- s += ')';
- }
- ans.push_back(s);
- std::cout << s << "\n";
- --i;
- continue;
- }
- else {
- std::string s;
- s = std::to_string(matrix[i][m - 1] / matrix[i][j]);
- ans.push_back(s);
- std::cout << s << "\n";
- --i;
- continue;
- }
- //сделать переменную отвечающую за прошлые корни и подконнектить к массиву анс, также флаг на присутствие до пустых членов
- }
- }
- if (empt) {
- std::string s;
- s = std::to_string(matrix[0][0]);
- for (int j1 = 1; j1 < m; ++j1) {
- if (matrix[0][j1] == 0) continue;
- s += " - ";
- if (matrix[0][j1] != 1) {
- std::string s1 = std::to_string(matrix[0][j1]);
- s += '(';
- s += s1;
- s += ')';
- s += '*';
- }
- s += '(';
- s += ans[ans.size() - j1];
- s += ')';
- }
- ans.push_back(s);
- std::cout << s << "\n";
- }
- else {
- std::string s;
- s = std::to_string(matrix[0][m - 1] / matrix[0][0]);
- ans.push_back(s);
- std::cout << s << "\n";
- }
- break;
- }
- }
- for (int i = 0; i < ans.size(); ++i) {
- std::cout << "x" << i + 1 << ": " << ans[ans.size() - 1 - i] << "\n";
- }
- }
- /*
- 4 4
- 1 1 -3 -1
- 2 1 -2 1
- 1 1 1 3
- 1 2 -3 1
- 4 4
- 2 1 1 2
- 1 3 1 5
- 1 1 5 -7
- 2 3 -3 14
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement