📚 Теория: Задание 6 ОГЭ — Анализ программы с формальным исполнителем
🎯 О чём это задание?
В задании 6 ОГЭ вам предлагается проанализировать программу, записанную на одном из языков программирования (обычно Pascal или Python), и определить:
- Сколько раз программа выведет «YES» при заданных входных данных
- Или найти значение параметра, при котором программа выведет «YES» определённое число раз
Программы в этом задании обычно содержат простые условные операторы с операциями сравнения и логическими связками.
📝 Основные операторы
🔢 Арифметические операции
| Операция | Pascal | Python | Пример |
|---|---|---|---|
| Сложение | + |
+ |
5 + 3 = 8 |
| Вычитание | - |
- |
5 - 3 = 2 |
| Умножение | * |
* |
5 * 3 = 15 |
| Деление (целочисленное) | div |
// |
17 div 5 = 3 |
| Остаток от деления | mod |
% |
17 mod 5 = 2 |
| Модуль числа | abs(x) |
abs(x) |
abs(-5) = 5 |
⚖️ Операции сравнения
| Операция | Pascal | Python | Пример |
|---|---|---|---|
| Равно | = |
== |
5 = 5 → true |
| Не равно | <> |
!= |
5 <> 3 → true |
| Больше | > |
> |
5 > 3 → true |
| Меньше | < |
< |
3 < 5 → true |
| Больше или равно | >= |
>= |
5 >= 5 → true |
| Меньше или равно | <= |
<= |
3 <= 5 → true |
🔗 Логические операции
| Операция | Pascal | Python | Описание |
|---|---|---|---|
| И (логическое умножение) | and |
and |
true, если оба условия истинны |
| ИЛИ (логическое сложение) | or |
or |
true, если хотя бы одно условие истинно |
| НЕ (отрицание) | not |
not |
инвертирует значение |
📋 Типы задач задания 6 ОГЭ
🎯 Тип 1: Подсчёт запусков с «YES»
Дана программа и набор пар входных данных. Нужно определить, сколько раз программа выведет «YES».
🎯 Тип 1b: Подсчёт запусков с «NO»
Дана программа и набор пар входных данных. Нужно определить, сколько раз программа выведет «NO». Это количество равно: 10 минус количество «YES».
🔍 Тип 2: Определение параметра A
Дана программа с параметром A и набор входных данных. Нужно найти наименьшее или наибольшее целое значение A, при котором программа выведет «YES» ровно N раз.
Если условие имеет вид (s >= A) and (t < 1),
ищут наименьшее A, а если (s < A) or (t < A) —
наибольшее A.
🧮 Алгоритм решения
Для задач типа 1 (подсчёт запусков)
💡 Пошаговый алгоритм
- Внимательно изучите условие в операторе
if - Для каждой пары входных данных (s, t) вычислите значения выражений
- Проверьте, выполняется ли условие
- Подсчитайте количество пар, для которых условие истинно
Для задач типа 2 (определение параметра)
💡 Пошаговый алгоритм
- Выпишите все пары входных данных (s, t)
- Для каждой пары определите, при каких значениях A условие истинно
- Составьте таблицу или неравенства для каждого запуска
- Найдите значение A, удовлетворяющее требуемому количеству «YES»
✏️ Примеры решения задач
Пример 1: Подсчёт запусков с операцией mod
Условие:
s = int(input()) t = int(input()) if s % 7 == t: print('YES') else: print('NO')
Попробуйте решить сами:
Нажмите на пару чисел, чтобы отметить её как YES (зелёный) или NO (красный). Повторный клик переключает состояние.
💡 Подсказка: условие s % 7 == t проверяет, равен ли
остаток от деления s на 7 значению t.
Показать решение
Решение:
Условие:
s mod 7 = t (остаток от деления s на 7 равен
t)Составим таблицу трассировки:
| № | s | t | s mod 7 | s mod 7 = t? | Вывод |
|---|---|---|---|---|---|
| 1 | 1 | 1 | 1 | 1 = 1 ✓ | YES |
| 2 | 1 | 2 | 1 | 1 ≠ 2 ✗ | NO |
| 3 | 3 | 2 | 3 | 3 ≠ 2 ✗ | NO |
| 4 | 3 | 3 | 3 | 3 = 3 ✓ | YES |
| 5 | 7 | 0 | 0 | 0 = 0 ✓ | YES |
| 6 | 7 | 2 | 0 | 0 ≠ 2 ✗ | NO |
| 7 | 10 | 0 | 3 | 3 ≠ 0 ✗ | NO |
| 8 | 10 | 7 | 3 | 3 ≠ 7 ✗ | NO |
| 9 | 11 | 4 | 4 | 4 = 4 ✓ | YES |
| 10 | 12 | 5 | 5 | 5 = 5 ✓ | YES |
Ответ: 5 (запуски № 1, 4, 5, 9, 10)
Пример 2: Логическая операция OR
Условие:
s = int(input()) t = int(input()) if (abs(s) < 3) or (abs(t) < 3): print('YES') else: print('NO')
Попробуйте решить сами:
Нажмите на пару чисел, чтобы отметить её как YES (зелёный) или NO (красный). Повторный клик переключает состояние.
💡 Подсказка: условие
(abs(s) < 3) or (abs(t) < 3) истинно, если хотя бы одно
из чисел по модулю меньше 3.
Показать решение
Решение:
Условие:
(abs(s) < 3) or (abs(t) < 3)Это условие истинно, если хотя бы одно из чисел по модулю меньше 3.
| № | s | t | abs(s) < 3? | abs(t) < 3? | OR? | Вывод |
|---|---|---|---|---|---|---|
| 1 | 1 | 3 | ✓ (1<3) | ✗ (3≥3) | ✓ | YES |
| 2 | 2 | 3 | ✓ (2<3) | ✗ (3≥3) | ✓ | YES |
| 3 | 3 | 4 | ✗ (3≥3) | ✗ (4≥3) | ✗ | NO |
| 4 | 4 | 5 | ✗ (4≥3) | ✗ (5≥3) | ✗ | NO |
| 5 | 1 | –2 | ✓ (1<3) | ✓ (2<3) | ✓ | YES |
| 6 | 1 | –3 | ✓ (1<3) | ✗ (3≥3) | ✓ | YES |
| 7 | 5 | –5 | ✗ (5≥3) | ✗ (5≥3) | ✗ | NO |
| 8 | –2 | 2 | ✓ (2<3) | ✓ (2<3) | ✓ | YES |
| 9 | –3 | 3 | ✗ (3≥3) | ✗ (3≥3) | ✗ | NO |
| 10 | –4 | 4 | ✗ (4≥3) | ✗ (4≥3) | ✗ | NO |
Ответ: 5 (запуски № 1, 2, 5, 6, 8)
Пример 3: Подсчёт запусков с «NO»
Условие:
s = int(input()) t = int(input()) if s % 7 == t: print('YES') else: print('NO')
Вопрос: Сколько было запусков, при которых программа напечатала «NO»?
Попробуйте решить сами:
Нажмите на пару чисел, чтобы отметить её как YES (зелёный) или NO (красный). Повторный клик переключает состояние.
💡 Подсказка: сначала найдите количество «YES», затем вычтите из 10.
Показать решение
Решение:
Условие:
s mod 7 = t (остаток от деления s на 7 равен
t)Из примера 1 мы уже знаем, что количество «YES» = 5.
Формула: Количество «NO» = 10 − Количество «YES»
Количество «NO» = 10 − 5 = 5
Ответ: 5
Пример 4: Определение параметра A
Условие:
s = int(input()) t = int(input()) A = int(input()) if (s >= A) and (t < 1): print('YES') else: print('NO')
Пары входных данных: (–8, –11); (1, –20); (1, –25); (4, –37); (7, 46); (30, –14); (30, –4); (30, 15); (80, –30); (80, –3).
Вопрос: Укажите наименьшее целое значение параметра A, при котором для указанных входных данных программа напечатает «YES» ровно 5 раз.
Показать решение
Решение:
Условие:
(s >= A) and (t < 1)Для вывода «YES» должны выполняться оба условия одновременно.
Шаг 1: Определим, для каких пар t < 1 (это обязательное условие):
| № | s | t | t < 1? | s >= A? |
|---|---|---|---|---|
| 1 | –8 | –11 | ✓ | –8 >= A |
| 2 | 1 | –20 | ✓ | 1 >= A |
| 3 | 1 | –25 | ✓ | 1 >= A |
| 4 | 4 | –37 | ✓ | 4 >= A |
| 5 | 7 | 46 | ✗ | — |
| 6 | 30 | –14 | ✓ | 30 >= A |
| 7 | 30 | –4 | ✓ | 30 >= A |
| 8 | 30 | 15 | ✗ | — |
| 9 | 80 | –30 | ✓ | 80 >= A |
| 10 | 80 | –3 | ✓ | 80 >= A |
Шаг 2: Анализ
Условие t < 1 выполняется для 8 пар (все кроме №5 и №8).
Нам нужно ровно 5 «YES», значит нужно выбрать 5 пар из этих 8.
Для каждой пары условие s >= A даёт ограничение на A:
- Пара 1: A ≤ –8
- Пара 2: A ≤ 1
- Пара 3: A ≤ 1
- Пара 4: A ≤ 4
- Пара 6: A ≤ 30
- Пара 7: A ≤ 30
- Пара 9: A ≤ 80
- Пара 10: A ≤ 80
Шаг 3: Подбор A
Нужно найти наименьшее A, при котором ровно 5 пар дадут «YES».
Если A = 1: пары с s >= 1 — это №2, 3, 4, 6, 7, 9, 10 (7 пар) — много
Если A = 2: пары с s >= 2 — это №4, 6, 7, 9, 10 (5 пар) — подходит!
Если A = 5: пары с s >= 5 — это №6, 7, 9, 10 (4 пары) — мало
Проверка для A = 2:
- Пара 1: s = –8, –8 >= 2? ✗ → NO
- Пара 2: s = 1, 1 >= 2? ✗ → NO
- Пара 3: s = 1, 1 >= 2? ✗ → NO
- Пара 4: s = 4, 4 >= 2? ✓ и t = –37 < 1 ✓ → YES
- Пара 5: t = 46 ≥ 1 → NO
- Пара 6: s = 30 >= 2 ✓ и t = –14 < 1 ✓ → YES
- Пара 7: s = 30 >= 2 ✓ и t = –4 < 1 ✓ → YES
- Пара 8: t = 15 ≥ 1 → NO
- Пара 9: s = 80 >= 2 ✓ и t = –30 < 1 ✓ → YES
- Пара 10: s = 80 >= 2 ✓ и t = –3 < 1 ✓ → YES
Итого: 5 «YES» (пары 4, 6, 7, 9, 10) ✓
Ответ: 2
Пример 5: Определение наибольшего параметра A (OR)
Условие:
s = int(input()) t = int(input()) A = int(input()) if (s < A) or (t < A): print('YES') else: print('NO')
Пары входных данных: (25, 5); (8, 8); (20, 10); (22, 12); (15, 25); (18, 22); (30, 30); (35, 7); (40, 3); (28, 14).
Вопрос: Укажите наибольшее целое значение параметра A, при котором для указанных входных данных программа напечатает «YES» ровно 5 раз.
Показать решение
Решение:
Условие:
(s < A) or (t < A)Достаточно выполнения одного из условий, поэтому всё выражение истинно, когда
min(s, t) < A.Шаг 1: Найдём min(s, t) для каждой пары:
| № | s | t | min(s, t) |
|---|---|---|---|
| 1 | 25 | 5 | 5 |
| 2 | 8 | 8 | 8 |
| 3 | 20 | 10 | 10 |
| 4 | 22 | 12 | 12 |
| 5 | 15 | 25 | 15 |
| 6 | 18 | 22 | 18 |
| 7 | 30 | 30 | 30 |
| 8 | 35 | 7 | 7 |
| 9 | 40 | 3 | 3 |
| 10 | 28 | 14 | 14 |
Шаг 2: Отсортируем значения min(s, t):
3, 5, 7, 8, 10, 12, 14, 15, 18, 30
Шаг 3: Нужно ровно 5 «YES». Условие
min < A должно быть истинно ровно для 5 наименьших
значений min — это 3, 5, 7, 8 и 10.Чтобы не захватить шестое значение (12), нужно A ≤ 12, значит наибольшее A = 12.
Проверка для A = 12: min < 12 верно для пар со значениями min 3, 5, 7, 8, 10 → ровно 5 «YES» ✓
Если взять A = 13, подойдёт ещё пара с min = 12 → уже 6 «YES» ✗
Ответ: 12
⚠️ Частые ошибки
- Путаница между mod и div — mod — это остаток от деления, div — целая часть от деления
- Неправильное понимание OR и AND — OR требует выполнения хотя бы одного условия, AND — обоих одновременно
- Забыть про отрицательные числа — abs(–3) = 3, а не –3
- Неправильный порядок сравнения — s >= A означает «s больше или равно A», а не наоборот
- Не проверить все пары — нужно проверить каждую пару входных данных
- Найти не наименьшее/наибольшее значение — внимательно читайте условие о том, какое именно значение нужно найти
💡 Полезные советы
🔢 Операция mod (остаток от деления)
Остаток от деления a mod n — это число от 0 до n–1:
- 17 mod 7 = 3 (17 = 2×7 + 3)
- 21 mod 7 = 0 (21 делится на 7 без остатка)
- 5 mod 7 = 5 (5 < 7, поэтому остаток равен самому числу)
Если число делится на n без остатка, то остаток равен 0.
🔗 Логические операции
AND (И) — логическое умножение:
- true AND true = true
- true AND false = false
- false AND false = false
OR (ИЛИ) — логическое сложение:
- true OR true = true
- true OR false = true
- false OR false = false
📊 Таблица трассировки
Для решения задач типа 1 удобно составлять таблицу трассировки:
- Выпишите все пары входных данных
- Для каждой пары вычислите значения всех выражений в условии
- Определите результат условия (true/false)
- Подсчитайте количество «YES»
🎯 План решения задачи
- 📝 Внимательно прочитайте условие программы и определите тип задачи
- 🔍 Выпишите условие в операторе if и разберите его структуру
- 📊 Составьте таблицу трассировки для всех пар входных данных
- ✏️ Выполните вычисления для каждой пары
- ✅ Подсчитайте результат и запишите ответ