📚 Теория: Задание 6 ОГЭ — Анализ программы с формальным исполнителем

🎯 О чём это задание?

В задании 6 ОГЭ вам предлагается проанализировать программу, записанную на одном из языков программирования (обычно Pascal или Python), и определить:

Программы в этом задании обычно содержат простые условные операторы с операциями сравнения и логическими связками.

📝 Основные операторы

🔢 Арифметические операции

Операция 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 раз.

🧮 Алгоритм решения

Для задач типа 1 (подсчёт запусков)

💡 Пошаговый алгоритм

  1. Внимательно изучите условие в операторе if
  2. Для каждой пары входных данных (s, t) вычислите значения выражений
  3. Проверьте, выполняется ли условие
  4. Подсчитайте количество пар, для которых условие истинно

Для задач типа 2 (определение параметра)

💡 Пошаговый алгоритм

  1. Выпишите все пары входных данных (s, t)
  2. Для каждой пары определите, при каких значениях A условие истинно
  3. Составьте таблицу или неравенства для каждого запуска
  4. Найдите значение A, удовлетворяющее требуемому количеству «YES»

✏️ Примеры решения задач

Пример 1: Подсчёт запусков с операцией mod

Условие:

s = int(input())
t = int(input())
if s % 7 == t:
    print('YES')
else:
    print('NO')

Попробуйте решить сами:

Нажмите на пару чисел, чтобы отметить её как YES (зелёный) или NO (красный). Повторный клик переключает состояние.

YES: 0 NO: 0

💡 Подсказка: условие 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 (красный). Повторный клик переключает состояние.

YES: 0 NO: 0

💡 Подсказка: условие (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: 0 NO: 0

💡 Подсказка: сначала найдите количество «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 = 4: пары с s >= 4 — это №4, 6, 7, 9, 10 (5 пар) — подходит!
Если A = 5: пары с s >= 5 — это №6, 7, 9, 10 (4 пары) — мало

Проверка для A = 4:
- Пара 1: s = –8, –8 >= 4? ✗ → NO
- Пара 2: s = 1, 1 >= 4? ✗ → NO
- Пара 3: s = 1, 1 >= 4? ✗ → NO
- Пара 4: s = 4, 4 >= 4? ✓ и t = –37 < 1 ✓ → YES
- Пара 5: t = 46 ≥ 1 → NO
- Пара 6: s = 30 >= 4 ✓ и t = –14 < 1 ✓ → YES
- Пара 7: s = 30 >= 4 ✓ и t = –4 < 1 ✓ → YES
- Пара 8: t = 15 ≥ 1 → NO
- Пара 9: s = 80 >= 4 ✓ и t = –30 < 1 ✓ → YES
- Пара 10: s = 80 >= 4 ✓ и t = –3 < 1 ✓ → YES

Итого: 5 «YES» (пары 4, 6, 7, 9, 10) ✓

Ответ: 4

⚠️ Частые ошибки

💡 Полезные советы

🔢 Операция 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 удобно составлять таблицу трассировки:

  1. Выпишите все пары входных данных
  2. Для каждой пары вычислите значения всех выражений в условии
  3. Определите результат условия (true/false)
  4. Подсчитайте количество «YES»

🎯 План решения задачи

  1. 📝 Внимательно прочитайте условие программы и определите тип задачи
  2. 🔍 Выпишите условие в операторе if и разберите его структуру
  3. 📊 Составьте таблицу трассировки для всех пар входных данных
  4. ✏️ Выполните вычисления для каждой пары
  5. ✅ Подсчитайте результат и запишите ответ