Основы программирования на С++ для начинающих

Задачи и решение. С++

  1. Типы данных, переменные и константы
  2. Ввод с клавиатуры и вывод данных на экран
  3. Арифметические операции и комбинированные операторы
  4. Операторы выбора if и else в С++
  5. Оператор switch в С++
  6. Цикл for в C++
  7. Циклы while, do while, вложенные циклы
  8. Двумерные массивы C++
  9. Массивы в C++
  10. Функции в C++
  11. Указатели C++
  12. Указатель на указатель C++
  13. Классы в С++

Дополнительный сборник задач с решениями

практика программирования, задачи с решением, задачи по программированию с++, задачи по программированию C++

На этой странице собраны все задачи по темам уроков, размещенных на нашем сайте. К каждой задаче прилагается наш вариант решения. Постарайтесь всё же решать их самостоятельно и только потом сравнивать наш исходный код со своим. “Хочешь научиться программировать – программируй”!

Больше практических заданий с решениями найдёте здесь.

Рекомендуем посетить Сайт для юных программистов – где вы найдете уроки по различным языкам программирования (в том числе для детей), 3D-моделированию, Linux и др.

128 thoughts on “Задачи и решение. С++

  1. Всем привет,нужна помощь в написании кода на Си для микро контролера С8051F38 с жк экраном ,нужно подключить к микро контролеру 7сигментное табло(общий анод) через кнопку,при включении на табло и на экране должно отображатся 0,при зажатии на кнопку должен пойти отсчет вперед до 9 с задержкой в 500мс,при отпускании кнопки табло сохраняет последнее показанное число ,при очередном зажатии отсчет продолжается с того места где остановился и так по кругу,отсчет должен отображатся паралельно и на жк экране с надписью Status:running зеленым цветом когда отсчет идет,и Status :stop красным когда останавливается,пробовал,но не получается
    #include
    #include
    #include
    #define BUTTON_PIN PB0
    #define SEGMENT_A_PIN PD0
    #define SEGMENT_B_PIN PD1
    #define SEGMENT_C_PIN PD2
    #define SEGMENT_D_PIN PD3
    #define SEGMENT_E_PIN PD4
    #define SEGMENT_F_PIN PD5
    #define SEGMENT_G_PIN PD6

    #define SEGMENT_PORT PORTD
    #define SEGMENT_DDR DDRD

    #define BUTTON_PORT PORTB
    #define BUTTON_DDR DDRB

    // Таблица символов для 7-сегментного индикатора (общий анод)
    const unsigned char SEGMENT_DIGITS[] = {
    0b00001000, // 0
    0b00111110, // 1
    0b00100100, // 2
    0b00011100, // 3
    0b01001110, // 4
    0b01100100, // 5
    0b01111000, // 6
    0b00000110, // 7
    0b01111110, // 8
    0b01101100, // 9
    };

    // Переменные
    volatile uint8_t current_digit = 0;
    volatile uint8_t button_state_prev = 1; // Инициализация как “отпущена” для исключения ложных нажатий

    void display_digit(uint8_t digit) {
    SEGMENT_PORT = ~SEGMENT_DIGITS[digit]; // Инвертировать значения для общего анода
    }

    void update_display() {
    display_digit(status == 0 ? 0 : current_digit);
    }

    void handle_button_press() {
    if (status == 0) {
    status = 1;
    current_digit = 0;
    } else {
    current_digit = (current_digit + 1) % 16;
    }
    update_display();
    }

    void handle_button_release() {
    if (status == 1) {
    status = 0;
    }
    }

    void setup() {
    // Настройка кнопки как входа с подтягивающим резистором
    BUTTON_DDR &= ~(1 << BUTTON_PIN);
    BUTTON_PORT |= (1 << BUTTON_PIN);

    // Настройка выводов сегментов как выходов
    SEGMENT_DDR |= (1 << SEGMENT_A_PIN) |
    (1 << SEGMENT_B_PIN) |
    (1 << SEGMENT_C_PIN) |
    (1 << SEGMENT_D_PIN) |
    (1 << SEGMENT_E_PIN) |
    (1 << SEGMENT_F_PIN) |
    (1 << SEGMENT_G_PIN);
    }

    void loop() {
    // Считывание состояния кнопки с обнаружением фронтов (volatile для обновления флага)
    volatile uint8_t button_state = PINB & (1 << BUTTON_PIN);

    // Обработка нажатия кнопки с обнаружением фронтов
    if (!button_state && button_state_prev) {
    handle_button_press();
    }

    // Обработка отпускания кнопки с обнаружением фронтов
    if (button_state && !button_state_prev) {
    handle_button_release();
    }

    // Обновление отображения
    update_display();

    // Задержка 500 мс (заменить на соответствующую функцию задержки)
    _delay_ms(500);

    // Обновление предыдущего состояния кнопки
    button_state_prev = button_state;
    }

    int main() {
    setup();
    loop();
    return 0;
    }

Добавить комментарий для Джейк Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *