ОГЭ 2027 · Информатика
Задание 16 ОГЭ по информатике
Что проверяет линия, сколько она стоит, на чём теряют баллы и как решать — по нашим конспектам. В банке 50 заданий этой линии с разбором.
Аналитика ОГЭ: №15 (алгоритм для исполнителя «Робот») и №16 (программа на универсальном языке программирования)
- Баллы
- по 2 балла за задание, вместе 4 из 21 (часть 2, по критериям)
- Частота
- в каждом варианте
Частые ловушки
- Программа зацикливается или не обрабатывает граничные случаи
- Ошибки в условии цикла или в отступах (в Python отступы задают блок)
- В №15 Робот врезается в стену — не проверяют «свободно ли справа/снизу»
Совет. Продумай алгоритм словами, потом код; проверь программу на нескольких входных данных
Аналитика ОГЭ: №16 — программа обработки последовательности чисел (часть 2, сдаётся файлом)
- Баллы
- 2 первичных балла
- Частота
- в каждом варианте
- Сложность
- высокий уровень по спецификации, но задача всегда одна и та же по устройству
Частые ловушки
- Ноль-ограничитель попадает в обработку: он делится на что угодно и завышает счётчик, а в поиске минимума становится ответом
- Минимум инициализирован нулём — тогда ответ всегда 0, каким бы ни был ввод
- Нет ветки «подходящих чисел нет», хотя условие требует что-то вывести в этом случае
- Цикл с фиксированным числом повторений (от 1 до 1000) вместо ограничителя
- Вывод внутри цикла вместо одного итогового вывода после него
Совет. Проверь решение по четырём точкам: ввод останавливается на 0, условие отбора то самое, накопитель инициализирован верно, случай «ничего не нашлось» обработан
Разборы
Разбор примера
Задание 16: количество чётных чисел последовательности
На вход подаётся последовательность натуральных чисел, оканчивающаяся числом 0 (0 в последовательность не входит). Выведите количество чётных чисел последовательности.
Показать решение по шагам
- 1. Накопитель: счётчик, начальное значение 0.
- 2. Условие отбора: чётность — это x % 2 == 0.
- 3. Схема ввода: первое число читаем до цикла, очередное — в конце тела. Иначе ноль пройдёт проверку на чётность (он делится на 2) и завысит счётчик на единицу.
- 4. Программа целиком (Python):
count = 0/x = int(input())/while x != 0:/if x % 2 == 0:/count = count + 1/x = int(input())/print(count). - 5. Трассировка на входе 4, 7, 10, 3, 0: 4 — да (1), 7 — нет, 10 — да (2), 3 — нет, 0 — конец. Печатается 2.
- 6. Проверка на пустом входе: если сразу подать 0, цикл не выполнится, напечатается 0 — это и есть «обработан случай, когда подходящих чисел нет».
Ответ: 2 (count = 0, условие x % 2 == 0, один вывод после цикла)
Разбор примера
Задание 16: сумма чисел, больших 100
На вход подаётся последовательность натуральных чисел, оканчивающаяся числом 0 (0 в последовательность не входит). Чисел не больше 1000, каждое не больше 30 000. Выведите сумму чисел, которые строго больше 100. Если таких чисел нет, выведите 0.
Показать решение по шагам
- 1. Накопитель: сумма, начальное значение 0. Это и обеспечивает требование «если таких чисел нет, вывести 0».
- 2. Условие отбора: x > 100, строго — число 100 не подходит.
- 3. Схема ввода: первое число до цикла, очередное — в конце тела, чтобы ноль не попал в обработку.
- 4. Программа целиком (Python):
s = 0/x = int(input())/while x != 0:/if x > 100:/s = s + x/x = int(input())/print(s). - 5. Трассировка на входе 150, 100, 200, 0: 150 — да, s = 150; 100 — нет (строгое неравенство); 200 — да, s = 350; 0 — конец. Печатается 350.
- 6. Второй тест: вход 5, 7, 0 — ни одно число не больше 100, s остаётся 0, печатается 0.
Ответ: 350 на первом тесте, 0 на втором
Разбор примера
Задание 16: максимальное число последовательности
Та же схема ввода. Выведите максимальное число последовательности. Известно, что хотя бы одно число есть.
Показать решение по шагам
- 1. Инициализация максимума: ноль здесь допустим, потому что числа натуральные и любое из них больше нуля. Но надёжнее взять первое прочитанное число — тогда программа верна и для последовательностей с любыми значениями.
- 2. Программа целиком (Python):
x = int(input())/m = x/while x != 0:/if x > m:/m = x/x = int(input())/print(m). - 3. Трассировка на входе 12, 45, 7, 0: m = 12; x = 12 — не больше; x = 45 → m = 45; x = 7 — нет; x = 0 — конец. Печатается 45.
- 4. Важная деталь:
m = xстоит после первого чтения и до цикла. Если инициализировать m внутри цикла, он будет сбрасываться на каждом шаге и программа напечатает последнее число вместо наибольшего. - 5. Чем отличается поиск минимума: там нулём инициализировать нельзя ни в каком случае — ответом всегда оказался бы 0. Для минимума берут первое число или заглушку 30001.
Ответ: 45 (m инициализируется первым прочитанным числом до цикла)
Разбор примера
Задание 16: сумма чисел, оканчивающихся на 5
На вход программе подаётся последовательность натуральных чисел, количество чисел неизвестно, последовательность заканчивается числом 0. Чисел не больше 1000, каждое не больше 30 000. Напишите программу, которая выводит сумму чисел, оканчивающихся на 5. Если таких чисел нет, вывести 0.
Показать решение по шагам
- 1. Схема ввода: читаем первое число до цикла, а очередное — в конце тела. Тогда ноль сразу обрывает цикл и не попадает в обработку.
- 2. Условие отбора: последняя цифра равна пяти, то есть x % 10 == 5.
- 3. Накопитель: сумма, начальное значение 0. Требование «если таких чисел нет, вывести 0» при этом выполняется само собой.
- 4. Программа целиком (Python):
s = 0/x = int(input())/while x != 0:/if x % 10 == 5:/s = s + x/x = int(input())/print(s). - 5. Трассировка на входе 15, 22, 105, 7, 0: x = 15 → подходит, s = 15. x = 22 → нет. x = 105 → подходит, s = 120. x = 7 → нет. x = 0 → цикл заканчивается. Печатается 120.
- 6. Что проверяет эксперт: ноль не обработан, условие соответствует требуемому, накопитель начат с нуля, вывод один и после цикла.
Ответ: s = 0; чтение до цикла и в конце тела; if x % 10 == 5: s += x; print(s) — на примере 120
Разбор примера
Задание 16: минимальное двузначное число в последовательности
Та же схема ввода. Напишите программу, которая выводит минимальное двузначное число последовательности. Если двузначных чисел нет, вывести 0.
Показать решение по шагам
- 1. Условие отбора: двузначное значит 10 <= x <= 99. Запись
x < 100без нижней границы пропустит однозначные числа — это типичная ошибка. - 2. Инициализация минимума: нулём начинать нельзя, иначе ответом всегда будет 0. Берут заглушку заведомо больше любого допустимого значения: по условию числа не превышают 30 000, значит, подойдёт 30001 (или 100, так как двузначные не больше 99).
- 3. Постобработка: если ни одного двузначного не встретилось, минимум так и останется равным заглушке — тогда надо вывести 0, как требует условие.
- 4. Программа целиком (Python):
m = 30001/x = int(input())/while x != 0:/if 10 <= x <= 99:/if x < m:/m = x/x = int(input())/if m == 30001:/print(0)/else:/print(m). - 5. Трассировка на входе 7, 45, 132, 23, 0: 7 — не двузначное; 45 — m = 45; 132 — нет; 23 — m = 23; 0 — конец. m ≠ 30001, печатается 23. На входе 5, 200, 0 ни одного двузначного нет, m остаётся 30001, печатается 0.
Ответ: m = 30001 как заглушка, условие 10 <= x <= 99, постобработка «если ничего не найдено — 0»
Уроки по этой линии
- Алгоритм и его свойства. Трассировка циклов — открыт бесплатно
- Основы программирования: переменные, деление нацело и остаток, циклы
- Задания 15 и 16: программирование части 2
- Задание 16: обработка последовательности чисел до нуля
Потренируй задание 16
Задания этой линии с проверкой и разбором решения — после бесплатной регистрации. Ошибки сами попадут в план повторения.