Главная › ОГЭ по информатике › Задание 6
ОГЭ по информатике · задание №6

Как решить задание 6 ОГЭ: анализ программы

Разберём, как по входным числам определить вывод программы. Для каждой из девяти задач ниже приведены все пары, вычисления и ответ; после них можно потренироваться самостоятельно.

Шаг 1 · читаем программу

Откуда берётся YES или NO

Программа считывает числа s и t (иногда второе называют k) и проверяет выражение после if. Если выражение верно, выполняется первая ветка. Если неверно, выполняется else. Каждая пара — отдельный запуск: нельзя переносить результат предыдущей пары в следующую.

s = int(input())
t = int(input())
if s > 2 and t < 5:
    print('YES')
else:
    print('NO')

Например, для пары (5; 4) проверки 5 > 2 и 4 < 5 обе верны, значит печатается YES. Для (2; 4) первая проверка ложна (2 > 2 неверно), значит печатается NO.

Что считают в ответе?Обычно число запусков с нужной надписью. Если написано «сколько значений A», считают подходящие значения параметра, а не количество пар.
Шаг 2 · операции

Как читать условия

ЗаписьСмыслПример
and / ИДолжны выполниться обе части5 > 2 and 4 < 5 → истина
or / ИЛИДостаточно одной верной части11 < 9 or 6 < 9 → истина
not / НЕМеняет истину на ложь и наоборотnot (5 > 2) → ложь
% / modОстаток от деления18 % 5 = 3
// / divЦелая часть от деления7 // 2 = 3

Строгие знаки > и < не включают границу: 2 > 2 ложно. Знаки >= и <= включают равенство. Сначала вычисляй арифметику, потом сравнивай числа, затем объединяй проверки словами and, or, not.

Шаг 3 · задачи с полными данными

Девять подробных разборов

1. AND: обе проверки должны быть верны

Условие. Программа получает пары чисел; после проверки она печатает YES либо NO. Сколько запусков напечатают YES?

if s > 2 and t < 5:
    print('YES')
else:
    print('NO')

Все входные пары: (-2; 3); (2; 5); (0; 3); (5; -3); (5; 4); (11; 4); (8; -6); (7; 3); (9; 1).

  1. Смотрим, что напечатано в первой ветке: YES. Поэтому нам нужны пары, для которых весь if истинен.
  2. and требует сразу двух ответов «да»: s > 2 и t < 5. Для пары (5; −3) это 5 > 2 и −3 < 5, оба верны — YES. Для пары (2; 5) оба неверны — NO.
  3. Отмечаем каждую из девяти строк отдельно, затем считаем YES в последнем столбце. Таких строк шесть.
№sts > 2t < 5Вывод
1-23нетдаNO
225нетнетNO
303нетдаNO
45-3дадаYES
554дадаYES
6114дадаYES
78-6дадаYES
873дадаYES
991дадаYES
Ответ: 6 запусков.

2. OR: достаточно одной верной проверки

Условие. Программа получает пары чисел; после проверки она печатает YES либо NO. Сколько запусков напечатают YES?

if s < 9 or t < 9:
    print('YES')
else:
    print('NO')

Все входные пары: (9; 9); (9; 10); (8; 5); (11; 6); (-11; 10); (-5; 9); (-10; 10); (4; 5); (8; 6).

  1. При or вывод YES получится, если хотя бы одно из чисел меньше 9. Например, (11; 6): 11 < 9 — нет, 6 < 9 — да; одного «да» хватает.
  2. Удобно сначала найти NO: это пары, у которых обе части ложны. У (9; 9) и (9; 10) оба числа не меньше 9; граница 9 в условие < 9 не входит.
  3. Всего девять запусков, два из них дают NO. Поэтому YES дают 9 − 2 = 7 запусков. Таблица показывает ту же проверку по каждой паре.
№sts < 9t < 9Вывод
199нетнетNO
2910нетнетNO
385дадаYES
4116нетдаYES
5-1110данетYES
6-59данетYES
7-1010данетYES
845дадаYES
986дадаYES
Ответ: 7 запусков.

3. Параметр A: ровно три ответа NO

Условие. Программа получает пары чисел; после проверки она печатает YES либо NO. Сколько целых значений A дадут ровно три ответа NO?

if s > 10 or t > A:
    print('YES')
else:
    print('NO')

Все входные пары: (1; 2); (11; 2); (1; 12); (11; 12); (-11; -12); (-11; 12); (-12; 11); (10; 10); (10; 5).

  1. YES напечатается при s > 10 or t > A. Для NO обе части должны быть ложны: s ≤ 10 и t ≤ A. Так мы получили условие для нужной надписи.
  2. Пары (11; 2) и (11; 12) всегда дают YES: у них s = 11 > 10. У остальных семи пар NO появляется тогда, когда параметр A достигнет их значения t.
  3. Выписываем t только для этих семи пар и сортируем: −12, 2, 5, 10, 11, 12, 12. Чтобы сработали ровно первые три, нужно включить 5, но ещё не включать 10. Значит, 5 ≤ A < 10.
  4. Поскольку A целое, подходят 5, 6, 7, 8, 9 — всего пять значений. При A = 5 NO дают именно (−11; −12), (1; 2) и (10; 5).
№sts ≤ 10?Когда даст NOВывод
112даA ≥ 2кандидат
2112нетникогдавсегда YES
3112даA ≥ 12кандидат
41112нетникогдавсегда YES
5-11-12даA ≥ -12кандидат
6-1112даA ≥ 12кандидат
7-1211даA ≥ 11кандидат
81010даA ≥ 10кандидат
9105даA ≥ 5кандидат
Ответ: 5 значений A.

4. Параметр A: найти наименьшее для восьми NO

Условие. Программа получает пары чисел; после проверки она печатает YES либо NO. Найди наименьшее целое A, при котором NO появится восемь раз.

if s > A or t > 12:
    print('YES')
else:
    print('NO')

Все входные пары: (13; 2); (11; 12); (-12; 12); (2; -2); (-10; -10); (6; -5); (2; 8); (9; 10); (1; 13).

  1. Меняем обе части условия для первой ветки на противоположные: NO ⇔ s ≤ A и t ≤ 12. Ошибка здесь — заменить or на or; для отрицания «ИЛИ» требуется «И».
  2. Пара (1; 13) всегда YES, так как 13 > 12. Остаётся ровно восемь пар с t ≤ 12. Чтобы все восемь стали NO, A должен быть не меньше каждого из их значений s.
  3. Среди этих s наибольшее 13 у пары (13; 2). Значит, необходимо A ≥ 13. При A = 12 эта пара ещё даст YES, а при A = 13 уже NO. Минимум — 13.
№stt ≤ 12?Когда даст NO
1132даA ≥ 13
21112даA ≥ 11
3-1212даA ≥ -12
42-2даA ≥ 2
5-10-10даA ≥ -10
66-5даA ≥ 6
728даA ≥ 2
8910даA ≥ 9
9113нетникогда
Ответ: 13.

5. Параметр A: найти наименьшее для четырёх YES

Условие. Программа получает пары чисел; после проверки она печатает YES либо NO. Найди наименьшее целое A, при котором YES появится четыре раза.

if s > A or t > 12:
    print('YES')
else:
    print('NO')

Все входные пары: (13; 2); (11; 12); (-12; 12); (2; -2); (-10; -10); (6; -5); (2; 8); (9; 10); (1; 13).

  1. В условии та же программа и те же девять пар, но теперь нужен ответ YES. Пара (1; 13) даёт YES при любом A за счёт t > 12. Нужно ещё три YES среди оставшихся восьми пар.
  2. У этих восьми пар t ≤ 12, поэтому всё решает s > A. Сортируем их s по убыванию: 13, 11, 9, 6, 2, 2, −10, −12. Выше A должны оказаться ровно три числа: 13, 11 и 9.
  3. Число 6 должно уже не проходить, значит A ≥ 6. Число 9 ещё должно проходить, значит A < 9. Целые варианты: 6, 7, 8. Наименьший — 6.
  4. Проверка при A = 6: YES дают s = 13, 11, 9 и отдельная пара (1; 13) по второму условию. Это ровно четыре. В таблице проверен каждый запуск.
№stВывод при A = 6Почему
1132YESs > 6
21112YESs > 6
3-1212NOусловие ложно
42-2NOусловие ложно
5-10-10NOусловие ложно
66-5NOусловие ложно
728NOусловие ложно
8910YESs > 6
9113YESt > 12
Ответ: 6.

6. Остаток от деления на 5

Условие. Программа получает пары чисел; после проверки она печатает YES либо NO. Второе число пары — k. Сколько запусков напечатают YES?

if s % 5 == k:
    print('YES')
else:
    print('NO')

Все входные пары: (1; 2); (5; 0); (18; 3); (21; 1); (10; 2); (12; 1); (9; 4); (5; 5); (3; 3).

  1. s % 5 означает остаток при делении s на 5. Например, 18 = 5 × 3 + 3, значит 18 % 5 = 3. Это не результат обычного деления.
  2. Для каждой строки сначала вычисляем остаток, затем сравниваем его с k. Пара (18; 3) даёт YES: 3 = 3. Пара (12; 1) даёт NO: 12 % 5 = 2, а 2 ≠ 1.
  3. Остаток при делении на 5 может быть только 0, 1, 2, 3, 4. Поэтому пара (5; 5) не подходит: 5 % 5 = 0. YES отмечен в пяти строках.
№sks % 5Вывод
1121NO
2500YES
31833YES
42111YES
51020NO
61212NO
7944YES
8550NO
9333YES
Ответ: 5 запусков.

7. Целая часть от деления на 2

Условие. Программа получает пары чисел; после проверки она печатает ДА либо НЕТ. Второе число — k. Сколько запусков напечатают ДА?

if s // 2 == k:
    print('ДА')
else:
    print('НЕТ')

Все входные пары: (1; 1); (8; 4); (14; 10); (20; 1); (7; 3); (10; 5); (10; 2); (4; 1); (1; 0).

  1. // берёт целую часть частного. Для положительных чисел отбрасываем дробную часть: 7 // 2 = 3, потому что 7/2 = 3,5.
  2. Сравниваем полученное число с k. У пары (7; 3) получается 3 = 3 — ДА. У пары (14; 10) получается 7 ≠ 10 — НЕТ.
  3. Для (1; 0) важно не округлять до 1: 1 // 2 = 0. Эта строка тоже даёт ДА. Итого четыре строки.
№sks // 2Вывод
1110НЕТ
2844ДА
314107НЕТ
420110НЕТ
5733ДА
61055ДА
71025НЕТ
8412НЕТ
9100ДА
Ответ: 4 запуска.

8. Сравнение с выражением 2 × k

Условие. Программа получает пары чисел; после проверки она печатает ДА либо НЕТ. Второе число — k. Сколько запусков напечатают ДА?

if s >= 2 * k:
    print('ДА')
else:
    print('НЕТ')

Все входные пары: (1; 2); (8; 4); (6; -12); (-5; -5); (3; 11); (-10; 12); (-10; -2); (4; 1); (2; 5).

  1. Сначала вычисляем 2 × k, потом сравниваем с s. Знак ≥ включает равенство: (8; 4) даёт ДА, потому что 8 ≥ 2 × 4 = 8.
  2. Не теряем знак при отрицательных k. Для (6; −12) значение 2 × k = −24, а 6 ≥ −24 верно. Для (−10; −2) 2 × k = −4, но −10 ≥ −4 неверно.
  3. После проверки девяти строк ДА получается четыре раза.
№sk2 × kВывод
1124НЕТ
2848ДА
36-12-24ДА
4-5-5-10ДА
531122НЕТ
6-101224НЕТ
7-10-2-4НЕТ
8412ДА
92510НЕТ
Ответ: 4 запуска.

9. NOT: переворачиваем результат AND

Условие. Программа получает пары чисел; после проверки она печатает YES либо NO. Сколько запусков напечатают YES?

if not ((s >= 5) and (t < 3)):
    print('YES')
else:
    print('NO')

Все входные пары: (2; -2); (5; 3); (14; 1); (-12; 5); (5; -7); (10; 3); (8; 2); (3; 0); (23; 9).

  1. Сначала проверяем выражение внутри скобок: s ≥ 5 и t < 3. У пары (14; 1) обе части верны, внутренний результат — истина.
  2. Внешнее not меняет истину на ложь. Поэтому (14; 1) получает NO, а (5; 3) получает YES: там t < 3 ложно, после отрицания всё условие становится истинным.
  3. Проверяем все девять строк и считаем YES — шесть. Можно свериться с эквивалентной записью: s < 5 или t ≥ 3.
№sts ≥ 5t < 3Вывод
12-2нетдаYES
253данетYES
3141дадаNO
4-125нетнетYES
55-7дадаNO
6103данетYES
782дадаNO
830нетдаYES
9239данетYES
Ответ: 6 запусков.
Проверка перед ответом

Шесть шагов для любого условия

  1. Найди строку if и запиши, что выводит истинная и ложная ветка.
  2. Перепиши все пары входных чисел: каждая пара — отдельный запуск.
  3. Посчитай арифметику (%, //, умножение), затем каждое сравнение.
  4. Объедини результаты по правилу and, or или not.
  5. Если есть A, найди условие для нужной ветки и отсортируй значения порога. Учти одинаковые значения.
  6. Посчитай запуски или значения A — в зависимости от формулировки вопроса.
Теперь самостоятельно

Пять упражнений с проверкой

Для каждого задания указан полный набор входных данных. После ошибки появится подсказка, а ответ можно исправить.

Решено: 0 из 5

1. Два условия AND

Если s > 2 and t < 5, программа выводит YES, иначе NO. Входные пары: (2; 5), (3; 4), (9; 7), (4; 0), (1; 2), (5; 5). Сколько раз выведется YES?

2. Одно из двух условий OR

Если s < 9 or t < 9, программа выводит YES, иначе NO. Пары: (9; 9), (10; 10), (8; 12), (12; 2), (0; 20), (7; 8). Сколько YES?

3. Найди наименьший параметр A

Если s > A or t > 12, программа выводит YES. Пары: (1; 13), (4; 2), (7; 10), (10; 5), (2; 14), (9; 1). Найди наименьшее целое A, при котором YES появится ровно четыре раза.

4. Остаток от деления

Если s % 5 == k, программа выводит YES. Пары (s; k): (18; 3), (12; 1), (5; 0), (5; 5), (9; 4). Сколько YES?

5. Отрицание NOT

Если not (s >= 5 and t < 3), программа выводит YES. Пары: (2; 0), (5; 2), (5; 3), (7; 1), (8; 4). Сколько YES?

Видеоразбор

Видео по заданию №6

Сверь свой способ проверки пар и подсчёта запусков с объяснением из материалов сайта.

Продолжи подготовку к ОГЭ

Теперь ты умеешь разбирать условие и подсчитывать выводы программы. Создай аккаунт, чтобы продолжить практику на сайте.

Создать бесплатный аккаунт
Частые ошибки

Проверь себя

При AND достаточно одного верного сравнения?

Нет. Для AND верными должны быть обе части. Если одна ложна, программа пойдёт в else.

Почему при A = 9 в разборе №3 уже не три NO?

Пока t ≤ 9 только у значений −12, 2 и 5. Четвёртое значение t равно 10, оно добавится лишь при A = 10.

Можно ли остаток от деления на 5 получить равным 5?

Нет. Остаток бывает от 0 до 4. При s = 5 остаток равен 0.

Дальше изучи задание №7 про адреса в сети. Повтори задание №5 про исполнителя или открой демоверсию ОГЭ.