Skip to content

Instantly share code, notes, and snippets.

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

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

Select an option

Save Yegorsh/fa47b5a5da4a9c934b82965a3ec8830a to your computer and use it in GitHub Desktop.
#include <iostream>
using namespace std;
void clearMemory(double** matrix, int size){
for (int i = 0; i < size; i++){
delete[] matrix[i];
}
delete [] matrix;
}
void SwapRows(double **Matrix, int size, int i){
for (int b=0; b<size+1; b++){
double temp;
temp = Matrix[i+1][b];
Matrix[i+1][b] = Matrix[i][b];
Matrix[i][b] = temp;
}
}
void FillMatrix(double **matrix, const int size){
for (int i=0; i<size; i++){
for (int j=0; j<size+1; j++){
matrix[i][j] = rand()%10;
//cin >> matrix[i][j];
}
}
}
void PrintMatrix(double **matrix, const int size){
for (int i=0; i<size; i++){
for (int j=0; j<size+1; j++){
cout << matrix[i][j] << "\t";
}
cout << endl;
}
}
int main(){
int size = 3;
double **Matrix = new double *[size];
for (int i=0; i<size; i++){
Matrix[i] = new double [size+1];
}
double **Sub_Matrix = new double *[size];
for (int i=0; i<size; i++){
Sub_Matrix[i] = new double [size+1];
for (int j=0; j<size+1; j++){
Sub_Matrix[i][j] = 0;
}
}
FillMatrix(Matrix,size);
Matrix[2][2] = 0;
PrintMatrix(Matrix, size);
cout << endl;
//ПРЯМОЙ ХОД
for (int i=0; i<size; i++){
if (Matrix[i][i]==0) {
SwapRows(Matrix, size, i);
}
else {
for (int j = 0; j < size + 1; j++) {
Sub_Matrix[i][j] = (Matrix[i][j] / Matrix[i][i]); // деление i-й строки на первый член != 0 для преобразования его в единицу
//cout << Sub_Matrix[i][j] << "\t";
}
//cout << endl;
for (int k = i + 1; k < size; k++) {
double temp = Matrix[k][i] / Matrix[i][i];
for (int j = 0; j < size + 1; j++) { //j - номер столбца следующей строки после k
Matrix[k][j] = Matrix[k][j] - (Matrix[i][j] * temp); //Зануление элементов матрицы ниже первого члена, преобразованного в единицу
}
}
}
}
//ОБРАТНЫЙ ХОД (Зануление верхнего правого угла)
for (int k=(size-1); k>-1; k--){ //k-номер строки
for (int i = k-1; i>-1; i--){ //i-номер следующей строки после k
double K = Sub_Matrix[i][k] / Sub_Matrix[k][k];
for (int j = size; j>-1; j--){ //j-номер столбца следующей строки после k
Sub_Matrix[i][j] = Sub_Matrix[i][j] - (Sub_Matrix[k][j] * K);
}
}
}
for (int i=0; i<size; i++){
cout << "x_" << i+1 << " = " << Sub_Matrix[i][size] << endl;
}
clearMemory(Matrix, size);
clearMemory(Sub_Matrix, size);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment