Загрузка данных
#include <iostream>
#include <vector>
#include <iomanip>
#include <sstream>
#include <string>
#include <limits>
namespace Color {
const std::string reset = "\033[0m";
const std::string bold = "\033[1m";
const std::string cyan = "\033[36m";
const std::string green = "\033[32m";
const std::string red = "\033[31m";
const std::string gray = "\033[90m";
}
// Читает целое число и повторяет запрос, если введены не числа
int readInt(const std::string& prompt) {
int value;
while (true) {
std::cout << prompt;
if (std::cin >> value) {
return value;
}
std::cout << Color::red
<< " Ошибка: введите целое число.\n"
<< Color::reset;
std::cin.clear();
std::cin.ignore(
std::numeric_limits<std::streamsize>::max(),
'\n'
);
}
}
void printHeader() {
std::cout << Color::cyan << Color::bold;
std::cout << R"(
╔══════════════════════════════════════════════╗
║ АНАЛИЗАТОР МАТРИЦЫ ║
║ Подсчёт нулей в нечётных столбцах ║
╚══════════════════════════════════════════════╝
)";
std::cout << Color::reset << '\n';
}
void printMatrix(const std::vector<std::vector<int>>& matrix) {
std::cout << '\n' << Color::bold << " Ваша матрица:\n" << Color::reset;
std::cout << " ";
for (std::size_t column = 0; column < matrix[0].size(); ++column) {
std::string title = "C" + std::to_string(column + 1);
if (column % 2 == 0) {
std::cout << Color::cyan;
} else {
std::cout << Color::gray;
}
std::cout << std::setw(8) << title << Color::reset;
}
std::cout << "\n";
for (std::size_t row = 0; row < matrix.size(); ++row) {
std::cout << Color::gray
<< " R" << row + 1 << " "
<< Color::reset;
for (std::size_t column = 0; column < matrix[row].size(); ++column) {
std::ostringstream cell;
cell << std::setw(8) << matrix[row][column];
if (matrix[row][column] == 0 && column % 2 == 0) {
std::cout << Color::red << Color::bold
<< cell.str() << Color::reset;
} else if (column % 2 == 0) {
std::cout << Color::cyan
<< cell.str() << Color::reset;
} else {
std::cout << cell.str();
}
}
std::cout << '\n';
}
}
int countZerosInOddColumns(const std::vector<std::vector<int>>& matrix) {
int count = 0;
// Индексы 0, 2, 4 соответствуют столбцам 1, 3, 5
for (std::size_t column = 0; column < matrix[0].size(); column += 2) {
for (std::size_t row = 0; row < matrix.size(); ++row) {
if (matrix[row][column] == 0) {
++count;
}
}
}
return count;
}
int main() {
printHeader();
std::cout << "Введите размеры матрицы.\n";
std::cout << "Допустимый размер — от 1 до 20.\n\n";
int rows;
int columns;
do {
rows = readInt(" Количество строк: ");
if (rows < 1 || rows > 20) {
std::cout << Color::red
<< " Введите число от 1 до 20.\n"
<< Color::reset;
}
} while (rows < 1 || rows > 20);
do {
columns = readInt(" Количество столбцов: ");
if (columns < 1 || columns > 20) {
std::cout << Color::red
<< " Введите число от 1 до 20.\n"
<< Color::reset;
}
} while (columns < 1 || columns > 20);
std::vector<std::vector<int>> matrix(
rows,
std::vector<int>(columns)
);
std::cout << "\nВведите элементы матрицы:\n";
for (int row = 0; row < rows; ++row) {
for (int column = 0; column < columns; ++column) {
std::string prompt =
" [" + std::to_string(row + 1) + ", " + std::to_string(column + 1) + "] > ";
matrix[row][column] = readInt(prompt);
}
}
printMatrix(matrix);
int result = countZerosInOddColumns(matrix);
std::cout << "\n"
<< Color::green << Color::bold
<< " РЕЗУЛЬТАТ\n"
<< Color::reset;
std::cout << " Нулей в нечётных столбцах: "
<< Color::green << Color::bold << result
<< Color::reset << "\n\n";
std::cout << Color::gray
<< " Нечётные столбцы нумеруются с 1: 1, 3, 5 и т. д.\n"
<< Color::reset;
return 0;
}
Сохраните файл, например, как main.cpp и соберите с поддержкой C++17:
g++ -std=c++17 main.cpp -o matrix_app
Цветное оформление отображается в современных терминалах. Эта версия — консольное приложение; для приложения с отдельным окном и кнопками понадобится интерфейс, например на Qt.