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


#include <iostream>
#include <cstdint>
#include <vector> // Для безопасной работы с динамическими массивами

using U16 = uint16_t;

int main() {
    // 1. Ввод размера массива с проверкой на корректность
    unsigned int n;
    std::cout << "Введите размер массива n (n > 0): ";
    if (!(std::cin >> n) || n == 0) {
        std::cerr << "Ошибка: введите корректное положительное число.\n";
        return 1;
    }

    // 2. Ввод числа A с проверкой диапазона
    unsigned int tmp;
    std::cout << "Введите число A (0..65535): ";
    if (!(std::cin >> tmp) || tmp > 65535) {
        std::cerr << "Ошибка: число должно быть в диапазоне 0..65535.\n";
        return 1;
    }
    U16 A = static_cast<U16>(tmp);

    // 3. Применение битовой маски
    // Обнуляем 8-й, 11-й и 14-й биты. Остальные оставляем без изменений.
    constexpr U16 mask = ~((1u << 8) | (1u << 11) | (1u << 14));
    A = A & mask;

    // 4. Создание и инициализация массива
    // std::vector автоматически управляет памятью (не нужен delete)
    // Второй аргумент (A) заполняет все n элементов этим значением
    std::vector<U16> arr(n, A);

    // 5. Вывод инициализированного массива
    std::cout << "\nИнициализированный массив:\n";
    for (unsigned int i = 0; i < n; ++i) {
        std::cout << "arr[" << i << "] = " << arr[i] << "\n";
    }

    // 6. Поиск элементов, у которых младшие 4 бита равны 0
    std::cout << "\nЭлементы, у которых младшие 4 бита равны 0:\n";
    bool found = false;

    for (unsigned int i = 0; i < n; ++i) {
        if ((arr[i] & 0x000F) == 0) {
            std::cout << "arr[" << i << "] = " << arr[i] << "\n";
            found = true;
        }
    }

    if (!found) {
        std::cout << "Таких элементов нет.\n";
    }

    // Память освободится автоматически при выходе из области видимости std::vector
    return 0;
}