Задание 5: формальные исполнители и анализ алгоритма
Разбираемся, как «думает» формальный исполнитель, и подбираем входное число — это задание №5.
Формальный исполнитель — это устройство (или человек), которое тупо, без раздумий, выполняет команды из своей системы команд по заданному алгоритму.
Что проверяет задание 5
Дают исполнителя с двумя-тремя командами, которые меняют число, и алгоритм (цепочку команд). Просят: что получится из данного числа, либо какое наименьшее/наибольшее число надо подать на вход, чтобы получить заданный результат. Главное — точно понимать, что делает каждая команда.
Пример исполнителя
Пусть исполнитель работает с числом и имеет команды:
| Команда | Что делает |
| 1. прибавь 2 | увеличивает число на 2 |
| 2. умножь на 3 | умножает число на 3 |
Алгоритм записывают цепочкой номеров команд, например 121 означает: прибавь 2, умножь на 3, прибавь 2.
Прямая задача: «что получится»
Что получит исполнитель из числа 4 по программе 212? Выполняем строго слева направо: команда 2 (умножь на 3) → команда 1 (прибавь 2) → команда 2 (умножь на 3).
def run(x, program):
for cmd in program:
if cmd == "1":
x = x + 2
elif cmd == "2":
x = x * 3
return x
print("Из 4 по 212:", run(4, "212"))
Вывод:
Из 4 по 212: 42
Проверим вручную: 4 → (умножь на 3) 12 → (прибавь 2) 14 → (умножь на 3) 42. Сходится. Главное правило — выполнять команды строго по порядку слева направо и доверять пошаговому результату, а не «прикидке».
Обратная задача: подобрать вход
Чаще спрашивают наоборот: какое наименьшее число нужно подать, чтобы исполнитель по программе 121 выдал 44? Здесь самый надёжный для экзамена путь — перебор: пробуем числа подряд и проверяем, не получится ли цель.
def run(x, program):
for cmd in program:
if cmd == "1":
x = x + 2
elif cmd == "2":
x = x * 3
return x
target = 44
program = "121" # фиксированная программа из условия
for start in range(0, 100):
if run(start, program) == target:
print("Наименьшее входное число:", start)
break
Вывод:
Наименьшее входное число: 12
Перебор мгновенно находит 12: программа 121 — это «прибавь 2, умножь на 3, прибавь 2», то есть из 12 получаем 12 → 14 → 42 → 44. Приём универсален: вы не выводите формулу, а просто проверяете все варианты по порядку — для диапазона ОГЭ это мгновенно. Если перебор ничего не печатает, значит подходящего числа нет, и условие стоит перечитать.
Анализ ветвлений
Иногда у исполнителя есть условные команды («если число чётное — раздели на 2»). Тогда при подборе входа важно отслеживать, по какой ветке пойдёт исполнитель. Моделируйте это if-ом внутри функции run и снова перебирайте вход.
Типичные ошибки
- Читают программу справа налево (надо слева направо).
- Путают «прибавь» и «умножь».
- В обратной задаче ищут любое число, а просили наименьшее или наибольшее.
- Доверяют «прикидке в уме» вместо аккуратного пошагового выполнения.
Итог
- Исполнитель выполняет команды строго по списку, слева направо.
- Прямая задача — пошаговое выполнение; обратная — перебор входов.
- При ветвлениях моделируйте условие и следите за выбранной веткой.
- Истина — это результат честного выполнения, а не интуиция.