Skip to content

Instantly share code, notes, and snippets.

@Yegorsh
Created December 21, 2021 21:03
Show Gist options
  • Select an option

  • Save Yegorsh/4b82a47164c1244ab6f00b38050b28bb to your computer and use it in GitHub Desktop.

Select an option

Save Yegorsh/4b82a47164c1244ab6f00b38050b28bb to your computer and use it in GitHub Desktop.
#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