Created
December 21, 2021 21:03
-
-
Save Yegorsh/4b82a47164c1244ab6f00b38050b28bb to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <iostream> | |
| using namespace std; | |
| void PrintMatrix(int **matrix, const int size){ | |
| for (int i=0; i<size; i++){ | |
| for (int j=0; j<size+1; j++){ | |
| if (j<size) { | |
| cout << matrix[i][j] << "*X" << j+1 << " "; | |
| } | |
| else{ | |
| cout << "=\t" << matrix[i][j] << "\t"; | |
| } | |
| } | |
| cout << endl; | |
| } | |
| } | |
| void FillMatrix(int **matrix, const int size){ | |
| for (int i=0; i<size; i++) { | |
| for (int j = 0; j < size + 1; j++){ | |
| if (j<size) { | |
| cout << "a[" << i+1 << "][" << j+1 << "] = "; | |
| cin >> matrix[i][j]; | |
| } | |
| else{ | |
| cout << "b[" << i+1 << "] = "; | |
| cin >> matrix[i][j]; | |
| } | |
| } | |
| } | |
| } | |
| void clearMemory(int** matrix, int size){ | |
| for (int i = 0; i < size; i++){ | |
| delete[] matrix[i]; | |
| } | |
| delete [] matrix; | |
| } | |
| int calcDet(int** matrix, int size){ | |
| int Det=0; | |
| if (size==1){ | |
| return matrix[0][0]; | |
| } | |
| else if (size==2){ | |
| return matrix[0][0]*matrix[1][1] - matrix[0][1]*matrix[1][0]; | |
| } | |
| else{ | |
| int sign = 1; | |
| int** newMatrix = new int*[size-1]; | |
| for (int s=0; s<size-1; s++) { | |
| newMatrix[s] = new int[size-1]; | |
| } | |
| for (int k = 0; k < size; k++){ | |
| int sub_i = 0; | |
| for (int i = 1; i < size; i++){ | |
| int sub_j = 0; | |
| for (int j = 0; j < size; j++){ | |
| if (j == k){ | |
| continue; | |
| } | |
| else{ | |
| newMatrix[sub_i][sub_j] = matrix[i][j]; | |
| sub_j++; | |
| } | |
| } | |
| sub_i++; | |
| } | |
| Det += sign * matrix[0][k] * calcDet(newMatrix,size-1); | |
| sign = -sign; | |
| } | |
| clearMemory(newMatrix,size-1); | |
| } | |
| return Det; | |
| } | |
| int main(){ | |
| double X_i; | |
| double MainDet, Det_i; | |
| int size; | |
| cout << "Введите количество уравнений" << endl; | |
| cin >> size; | |
| int **system = new int *[size]; //Массив системы линейных уравнений | |
| for (int i = 0; i < size; i++) { | |
| system[i] = new int [(size+1)]; | |
| } | |
| cout << "Введите коэффициенты матрицы системы" << endl; | |
| FillMatrix(system, size); | |
| cout << endl; | |
| PrintMatrix(system, size); | |
| cout << endl; | |
| int **main_det = new int *[size]; //Определитель системы | |
| for (int i = 0; i < size; i++) { | |
| main_det[i] = new int [size]; | |
| } | |
| for (int i=0; i<size; i++){ | |
| for (int j=0; j<size; j++){ | |
| main_det[i][j] = system[i][j]; | |
| } | |
| } | |
| MainDet = calcDet(main_det, size); | |
| if (MainDet != 0) { | |
| int **iDet = new int *[size]; | |
| for (int i = 0; i < size; i++) { | |
| iDet[i] = new int[size]; | |
| } | |
| for (int k = 0; k < size; k++) { | |
| for (int i = 0; i < size; i++) { | |
| for (int j = 0; j < size; j++) { | |
| if (j != k) { | |
| iDet[i][j] = system[i][j]; | |
| } else { | |
| iDet[i][j] = system[i][size]; | |
| } | |
| } | |
| } | |
| Det_i = calcDet(iDet, size); | |
| X_i = double(Det_i) / (MainDet); | |
| cout << "X" << (k + 1) << " = " << X_i << endl; | |
| } | |
| clearMemory(iDet, size); | |
| } | |
| else{ | |
| cout << "Определитель матрицы равен нулю!" << endl; | |
| } | |
| clearMemory(main_det, size); | |
| clearMemory(system, size); | |
| return 0; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment