#include #include // для std::pair, https://ru.cppreference.com/w/cpp/utility/pair #include // Динамический массив, почитать про вектор можно тут: https://en.cppreference.com/w/cpp/container/vector // Настройки const bool useTab = false; // использовать табуляцию после каждого символа struct MatrixInfo // структура описивающия матрицу { MatrixInfo(int rows, int cols, char whiteFiller, char greyFiller, std::pair center) : matrixCenterCoordinates(center) { this->rows = rows; this->cols = cols; this->whiteFiller = whiteFiller; this->greyFiller = greyFiller; this->isEvenRows = rows % 2 == 0; this->isEvenCols = cols % 2 == 0; FindGreyCellsCoordinates(); } /*Переменные описывающие матрицу*/ int rows; int cols; char whiteFiller; char greyFiller; bool isEvenRows; bool isEvenCols; const std::pair matrixCenterCoordinates; // координаты центра квадрата std::vector> blackSquareCoordinates; // массив координат серых точек auto GetBlackSquareCoordinates() const { return blackSquareCoordinates; } // возвращает координаты серых точек private: void FindGreyCellsCoordinates() // ф-ция вичисления координат темных ячеек { if (!isEvenRows && !isEvenCols) { blackSquareCoordinates.push_back(std::make_pair(matrixCenterCoordinates.first + 1, matrixCenterCoordinates.second + 1)); blackSquareCoordinates.push_back(std::make_pair(matrixCenterCoordinates.first - 1, matrixCenterCoordinates.second - 1)); blackSquareCoordinates.push_back(std::make_pair(matrixCenterCoordinates.first + 1, matrixCenterCoordinates.second - 1)); blackSquareCoordinates.push_back(std::make_pair(matrixCenterCoordinates.first - 1, matrixCenterCoordinates.second + 1)); blackSquareCoordinates.push_back(std::make_pair(matrixCenterCoordinates.first, matrixCenterCoordinates.second - 1)); blackSquareCoordinates.push_back(std::make_pair(matrixCenterCoordinates.first, matrixCenterCoordinates.second + 1)); blackSquareCoordinates.push_back(std::make_pair(matrixCenterCoordinates.first + 1, matrixCenterCoordinates.second)); blackSquareCoordinates.push_back(std::make_pair(matrixCenterCoordinates.first - 1, matrixCenterCoordinates.second)); } else { blackSquareCoordinates.push_back(std::make_pair(matrixCenterCoordinates.first + 1.5, matrixCenterCoordinates.second + 1.5)); blackSquareCoordinates.push_back(std::make_pair(matrixCenterCoordinates.first - 1.5, matrixCenterCoordinates.second - 1.5)); blackSquareCoordinates.push_back(std::make_pair(matrixCenterCoordinates.first + 1.5, matrixCenterCoordinates.second - 1.5)); blackSquareCoordinates.push_back(std::make_pair(matrixCenterCoordinates.first - 1.5, matrixCenterCoordinates.second + 1.5)); blackSquareCoordinates.push_back(std::make_pair(matrixCenterCoordinates.first - 1.5, matrixCenterCoordinates.second - 0.5)); blackSquareCoordinates.push_back(std::make_pair(matrixCenterCoordinates.first - 1.5, matrixCenterCoordinates.second + 0.5)); blackSquareCoordinates.push_back(std::make_pair(matrixCenterCoordinates.first + 1.5, matrixCenterCoordinates.second - 0.5)); blackSquareCoordinates.push_back(std::make_pair(matrixCenterCoordinates.first + 1.5, matrixCenterCoordinates.second + 0.5)); blackSquareCoordinates.push_back(std::make_pair(matrixCenterCoordinates.first - 0.5, matrixCenterCoordinates.second - 1.5)); blackSquareCoordinates.push_back(std::make_pair(matrixCenterCoordinates.first - 0.5, matrixCenterCoordinates.second + 1.5)); blackSquareCoordinates.push_back(std::make_pair(matrixCenterCoordinates.first + 0.5, matrixCenterCoordinates.second - 1.5)); blackSquareCoordinates.push_back(std::make_pair(matrixCenterCoordinates.first + 0.5, matrixCenterCoordinates.second + 1.5)); } } }; MatrixInfo CreateMatrix() // ф-ция создания матрицы { int rows, cols; std::cout << "Enter matrix size, rows cols: "; std::cin >> rows >> cols; char whiteFiller, greyFiller; std::cout << "Enter white and grey fillers: "; std::cin >> whiteFiller >> greyFiller; return MatrixInfo(rows, cols, whiteFiller, greyFiller, std::make_pair((0 + rows) / 2, (0 + cols) / 2)); } bool IsCellGrey(const MatrixInfo& matrix, const std::pair& pointCoordinates) { for (const auto p : matrix.blackSquareCoordinates) { if (p == pointCoordinates) { return true; } } return false; } void ColorMatrix(const MatrixInfo& matrix) { auto greyCells = matrix.GetBlackSquareCoordinates(); for (size_t row = 0; row < matrix.rows; ++row) { for (size_t col = 0; col < matrix.cols; ++col) { if (IsCellGrey(matrix, std::make_pair(row, col))) { std::cout << matrix.greyFiller; } else { std::cout << matrix.whiteFiller; } } std::cout << std::endl; } } int main() { /*Оптимизация потоков ввода/вывода*/ std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); MatrixInfo matrix = CreateMatrix(); // создаём матрицу, помешаем результат в структуру MatrixInfo, которая хранит информацию о нашей матрице ColorMatrix(matrix); // выводим матрицу system("pause"); return 0; }