ОГЭ · Информатика · Алгоритмы и анализ программ (задания 5, 6)
Задание 6: анализ программы с условным оператором
Дана короткая программа с ветвлением. Нужно проанализировать, при каких значениях параметра она выдаёт нужный результат на заданном наборе входных данных.
- ⚠Неверно инвертируют условие: «NO» печатается, когда условие if ложно
- ⚠Путают строгие и нестрогие неравенства (> и ≥) при подсчёте
- ⚠Забывают, что нужно наибольшее (или наименьшее) значение параметра
Условный оператор и анализ программ
Определение
Условный оператор (ветвление) — конструкция if … else: если условие истинно, выполняется одна ветвь, иначе — другая
Определение
Логика вывода — в задании программа печатает «YES» при истинном условии if и «NO» при ложном. «NO» — это отрицание всего условия
| НЕ (A ИЛИ B) | = (НЕ A) И (НЕ B) |
|---|---|
| НЕ (A И B) | = (НЕ A) ИЛИ (НЕ B) |
| НЕ (s > A) | = s ≤ A |
| НЕ (t > 12) | = t ≤ 12 |
Порядок решения задания 6
• Запиши условие, при котором печатается нужное слово (для «NO» — отрицание if).
• Примени законы де Моргана, чтобы раскрыть отрицание.
• Для каждой пары чисел проверь, выполняется ли условие при параметре A.
• Подбери наибольшее (или наименьшее) A, дающее нужное число совпадений.
Ловушка: «s ≤ A» и «t ≤ 12» должны выполняться одновременно (И), чтобы напечатать «NO». Достаточно нарушить одно из них — и печатается «YES».
Как разбирать чужую программу в задании 6
В задании 6 программу не пишут, а читают: дан готовый код и несколько наборов входных данных, и надо сказать, что программа напечатает или при каком значении параметра она поведёт себя нужным образом. Работает один порядок. Первое: понять, что именно проверяет условие в программе. Почти всегда это if с логической операцией or («или») либо and («и»). Второе: вспомнить, когда такое условие истинно. or истинно, если верна хотя бы одна часть; and — только если верны обе. Третье: если в условии есть параметр (обычно A), перебирать надо не пары чисел, а значения этого параметра, проверяя для каждого, сколько пар дают нужный ответ. И главное наблюдение, которое экономит половину работы: в типовой задаче «при каком наибольшем A программа напечатает «YES» ровно в N случаях» вторая часть условия от A не зависит — значит, сначала выясняют, сколько пар проходят по ней сами, и только остаток «добирают» первой частью. Четвёртое: ответ всегда проверяют подстановкой двух значений — найденного и следующего за ним, чтобы убедиться, что граница именно здесь.
Разбор примера
Задание 6: наибольшее A, при котором «NO» выводится 5 раз
Программа вводит три числа s, t, A и печатает «YES», если (s > A) или (t > 12), иначе «NO». Проведено 9 запусков с парами (s, t): (13, 2); (11, 12); (−12, 12); (2, −2); (−10, −10); (6, −5); (2, 8); (9, 10); (1, 13). Укажите наибольшее целое A, при котором программа напечатала «NO» ровно 5 раз.
Показать решение по шагам
- 1. Шаг 1 — когда печатается «NO»: условие соединено операцией
or, а «NO» выводится, когда обе части ложны, то есть s ≤ A и t ≤ 12 одновременно. - 2. Шаг 2 — отсекаем пары, которые «NO» не дадут никогда: смотрим вторые числа: 2, 12, 12, −2, −10, −5, 8, 10, 13. Больше 12 только 13, значит, пара (1, 13) при любом A печатает «YES» и в счёт «NO» не идёт. Остаётся 8 пар.
- 3. Шаг 3 — сортируем их первые числа: −12, −10, 2, 2, 6, 9, 11, 13. Нужно, чтобы ровно 5 из них оказались не больше A.
- 4. Шаг 4 — считаем: пятое число по возрастанию — это 6, шестое — 9. Значит, A должно быть не меньше 6 (чтобы вошли пять) и меньше 9 (чтобы не вошло шестое): подходят A = 6, 7, 8. Наибольшее — 8.
- 5. Шаг 5 — проверка границы двумя подстановками: при A = 8 не больше A числа −12, −10, 2, 2, 6 — ровно 5 «NO». При A = 9 добавляется число 9, и «NO» становится 6. Граница подтверждена.
- 6. Приём целиком: отбросить пары, решаемые частью без A; отсортировать остальные; найти нужное по счёту число. Перебирать все A подряд не нужно — ответ читается прямо из отсортированного ряда.
Ответ: 8
Разбор примера
Задание 6: сколько раз программа напечатает «YES» при заданном A
Та же программа: «YES», если (s > A) или (t > 10). Пары (s, t): (5, 3); (10, 20); (−2, 5); (7, 7); (3, 15); (8, 1); (−5, −5); (12, 2); (4, 13). Сколько раз будет напечатано «YES» при A = 7?
Показать решение по шагам
- 1. Проверяем каждую пару по очереди, помня, что
orдостаточно одной истинной части. - 2. (5, 3): 5 > 7 — нет; 3 > 10 — нет → NO. (10, 20): 10 > 7 — да → YES. (−2, 5): нет и нет → NO.
- 3. (7, 7): 7 > 7 — нет (строгое неравенство!); 7 > 10 — нет → NO. Это главная ловушка задания: равенство строгому неравенству не удовлетворяет.
- 4. (3, 15): 15 > 10 — да → YES. (8, 1): 8 > 7 — да → YES. (−5, −5): нет → NO.
- 5. (12, 2): 12 > 7 — да → YES. (4, 13): 13 > 10 — да → YES.
- 6. Итого 5 раз «YES». Проверка: 9 пар, из них 4 дали «NO» — сходится.
Ответ: 5
Разбор примера
Задание 6: условие с «и» вместо «или»
Программа печатает «YES», если (s > 5) и (t < 10), иначе «NO». Пары (s, t): (6, 3); (4, 3); (7, 12); (10, 9); (5, 5); (8, 10). Сколько раз будет напечатано «YES»?
Показать решение по шагам
- 1. С
andстроже: нужны обе части. - 2. (6, 3): 6 > 5 — да, 3 < 10 — да → YES. (4, 3): 4 > 5 — нет → NO (вторую часть можно уже не проверять).
- 3. (7, 12): 7 > 5 — да, но 12 < 10 — нет → NO. (10, 9): да и да → YES.
- 4. (5, 5): 5 > 5 — нет → NO. Снова граница строгого неравенства.
- 5. (8, 10): 8 > 5 — да, но 10 < 10 — нет → NO. Та же ловушка с другой стороны.
- 6. Итого 2 раза. Вывод: при
andбольшинство пар отсеиваются, приor— проходят. Поняв, какая операция в условии, уже можно прикинуть порядок ответа и заметить грубую ошибку.
Ответ: 2
Разбор примера
Файл-ответ proverka.py (формат задания 16): программа, перебирающая пары и значения A
Соберите программу, которая по списку пар считает, сколько раз печатается «YES» при каждом A, — чтобы проверять ответы линии 6. Файл сохраняется как proverka.py.
Показать решение по шагам
- 1. Замысел: внешний цикл идёт по значениям параметра A, внутренний — по парам; считаем, при каком A нужное число «YES» достигается.
- 2. Код целиком (Python):
pairs = [(13,2),(11,12),(-12,12),(2,-2),(-10,-10),(6,-5),(2,8),(9,10),(1,13)]/for A in range(-20, 21):/no = 0/for s, t in pairs:/if not (s > A or t > 12):/no = no + 1/if no == 5:/print(A). - 3. Что печатает: все значения A, при которых «NO» выводится ровно 5 раз, — для первого разбора это 6, 7 и 8. Наибольшее из напечатанных, 8, и есть ответ задания.
- 4. Зачем это нужно: линия 6 проверяется автоматически, но ручной перебор границы легко сбить. Программа находит все подходящие A сразу, и видно, где кончается диапазон.
- 5. Чему учит для задания 16: вложенным циклам, счётчику с нулевой инициализацией и отрицанию логического условия. Все три приёма входят в критерии линии 16.
- 6. Как сохранять: текстовый файл с расширением .py.
Ответ: proverka.py: вложенные циклы по A и по парам, печатает 6, 7 и 8
ℹ️ Спецификация КИМ ОГЭ-2026 по информатике: «Решением каждого задания части 2 является отдельный файл, подготовленный в соответствующей программе (текстовом редакторе или электронной таблице)». Линии 13–16 — 9 баллов из 21, и проверяет их эксперт.
Задание №6 в формате экзамена
Ответить и проверить себя — после бесплатной регистрации.
Задание №6 в формате экзамена
Ответить и проверить себя — после бесплатной регистрации.
Задание №6 в формате экзамена
Ответить и проверить себя — после бесплатной регистрации.
Линия 6 бывает не только про условный оператор
Три разбора выше — один и тот же шаблон банка: программа с ветвлением печатает YES или NO. Но линия 6 — одна из двух самых крупных в первой части (48 заданий, столько же у линии 10), и шаблонов в ней одиннадцать: циклы while и for, обработка цифр числа, деление нацело и остаток, поиск максимума, подсчёт по условию, анализ соседних элементов. Приём для всех один — трассировка: выписать значения переменных после каждого шага и не держать их в голове.
Задание №6 в формате экзамена
Ответить и проверить себя — после бесплатной регистрации.
Задание №6 в формате экзамена
Ответить и проверить себя — после бесплатной регистрации.
Задание №6 в формате экзамена
Ответить и проверить себя — после бесплатной регистрации.