Помогите закоментировать код
Ребят, кому не сложно, закоментируйте пожалуйста код программы, что бы мне проще было в ней разобраться. Спасибо! ps: прошу обьяснить, как работает каждая строчка кода (что делает), но это в идеале. Хотя бы блоки (какой блок и что делает).
#include <iostream>
#include <limits>
using std::endl;
using std::cout;
using std::pair;
using std::make_pair;
using std::numeric_limits;
template<typename T> class Matrix {
private:
T * *matrix;
size_t N, M;
public:
Matrix(size_t _N, size_t _M) : N(_N), M(_M) {
this->matrix = new T*[this->N];
for (size_t i(0); i < this->N; i++) {
this->matrix[i] = new T[this->M];
}
};
T* operator[](const size_t index) { return this->matrix[index]; }
friend std::ostream& operator<<(std::ostream &os, Matrix &obj) {
for (size_t i(0); i < obj.N; i++) {
for (size_t j(0); j < obj.M; j++) {
os << obj[i][j];
if (j + 1 != obj.M)
os << " ";
}
os << std::endl;
}
return os;
}
void getSaddlePoint() {
T* min = new T[N];
T* max = new T[M];
for (size_t i = 0; i < N; i++)
{
min[i] = numeric_limits<T>::max();
for (size_t j = 0; j < M; j++)
{
if (matrix[i][j] < min[i])
{
min[i] = matrix[i][j];
}
}
}
for (size_t j = 0; j < M; j++)
{
max[j] = numeric_limits<T>::min();
for (size_t i = 0; i < N; i++)
{
if (matrix[i][j] > max[j])
{
max[j] = matrix[i][j];
}
}
}
cout << "Saddle point indexes" << endl;
size_t k = 0;
for (size_t i = 0; i < N; i++)
{
for (size_t j = 0; j < M; j++)
{
if (min[i] == max[j])
{
cout << i << " " << j << endl;
k++;
}
}
}
if (!(k))
cout << "not Saddle points!" << endl;
delete[] min;
delete[] max;
}
void GetQuadrant (int k,int p)
{
int first=0;
int second=0;
int third=0;
int fourth=0;
for (size_t i = 0; i < N; i++)
{
for (size_t j = 0; j < M; j++)
{
if (k<i && j<p)
{
first+=matrix[i][j];
}
if (k>i && j<p)
{
first+=matrix[i][j];
}
if (k>i && j<p)
{
third+=matrix[i][j];
}
if (k>i && j>p)
{
fourth+=matrix[i][j];
}
}
}
if (first>=second && first>=third && first>=fourth)
{
cout<<first;
}
if (second>=first && second>=third && second>=fourth)
{
cout<<second;
}
if (third>=first && third>=second && third>=fourth)
{
cout<<third;
}
if (fourth>=first && third>=second && fourth>=third)
{
cout<<fourth;
}
}
~Matrix(void) {
for (size_t i(0); i < this->N; i++)
delete this->matrix[i];
delete this->matrix;
};
};
/*-------------------------------------------------------------------------*/
int main() {
const size_t N2(4), M2(4);
Matrix<int> matrix2(N2, M2);
//in
matrix2[0][0] = 2;
matrix2[0][1] = 3;
matrix2[0][2] = 5;
matrix2[0][3] = 2;
matrix2[1][0] = 2;
matrix2[1][1] = 4;
matrix2[1][2] = 6;
matrix2[1][3] = 2;
matrix2[2][0] = -2;
matrix2[2][1] = 7;
matrix2[2][2] = 2;
matrix2[2][3] = 0;
matrix2[3][0] = 1;
matrix2[3][1] = 2;
matrix2[3][2] = 5;
matrix2[3][3] = 8;
//out
cout << endl << matrix2 << endl;
matrix2.getSaddlePoint();
cout<<endl;
matrix2.GetQuadrant(M2,2);
cout<<endl;
system("pause");
return 0;
}
Ответы (2 шт):
Для решения проблемы с комментированием кода - используйте нормальные IDE позволяющие это сделать. Например в visual studio закомментировать код можно сочетанием клавиш ctrl + k и после ctrl + c. Раскомментировать можно с помощью ctrl + k и после ctrl + u. (В версии 2019 это точно так)
Во втором случае: Лучше автора кода, никто не сможет его объяснить :). Если же вы не автор кода - постарайтесь разобраться в коде сами, что поможет вам узнать больше о C++ и избавить этот форум от таких просьб.
Я бы вставил описание перед каждым полем и функцией, что они делают. Это хорошая практика.
T** matrix //массив массивов элементов с типом T
size_t N, M //кол-во строк и столбцов
T* operator[] //перегрузка оператора индекса, чтоб получать элемент матрицы m[i][j]
operator<< //для вывода матрицы в поток, например cout
А вот с методами посложнее:
getSaddlePoint() //поиск седлового элемента
GetQuadrant()//разбивают матрицу на 4 подматрицы (по строке и столбцу) и выводят максимальную сумму элементов сред них
Обращаю внимание, что в коде есть ошибки