Задание 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 и снова перебирайте вход.

Типичные ошибки

  • Читают программу справа налево (надо слева направо).
  • Путают «прибавь» и «умножь».
  • В обратной задаче ищут любое число, а просили наименьшее или наибольшее.
  • Доверяют «прикидке в уме» вместо аккуратного пошагового выполнения.

Итог

  • Исполнитель выполняет команды строго по списку, слева направо.
  • Прямая задача — пошаговое выполнение; обратная — перебор входов.
  • При ветвлениях моделируйте условие и следите за выбранной веткой.
  • Истина — это результат честного выполнения, а не интуиция.
Проверьте себя
1. Что характеризует формального исполнителя?
AОн сам выбирает лучший способ
BОн точно выполняет команды без раздумий
CОн работает только со словами
DОн может ошибаться случайно
2. Команды: 1 — прибавь 3, 2 — умножь на 2. Что получится из 5 по программе 12?
A13
B16
C10
D26
3. Какой способ самый надёжный для обратной задачи (подобрать вход) на ОГЭ?
AУгадать ответ
BПеребрать входные числа по порядку и проверить результат
CРешить квадратное уравнение
DВыполнить программу справа налево
Поддержать проект