Загрузка данных


#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.