Теория:

Характеристика задания

1. Тип ответа: запись числового выражения.

2. Структура содержания задания: задан алгоритм на формальном языке.

3. Уровень сложности: повышенный.

4. Примерное время выполнения: \(8\) минут.

5. Количество баллов: \(1\).

6. Требуется специальное программное обеспечение: да.

7. Задание проверяет умение анализировать результат исполнения алгоритма, содержащего ветвление и цикл, с помощью языка программирования.
 
Пример задания (демоверсия ЕГЭ \(2023\))

Скриншот 25-09-2022 232709.png
Рис. \(1\). Пример задания
 
Для начала рассмотрим более лёгкое аналогичное задание.

У исполнителя Калькулятор три команды, которым присвоены номера:
1) прибавь \(1\);
2) умножь на \(2\);
3) умножь на \(3\).

Сколько существует программ, которые число \(1\) преобразуют в число \(6\)?
 
Решить такую задачу можно следующими способами:
1) построить дерево;
2) построить таблицу вариантов;
3) с помощью языка программирования.

Способ \(1\)
 
Схема.svg
Рис. \(2\). Дерево
 
Способ \(2\)
 
Чтобы определить количество программ, нужно рассмотреть условия:
1) прибавь \(1\);
2) умножь на \(2\);
3) умножь на \(3\).

Построим таблицу. Условия получения чисел будут таковы:
если число не делится ни на \(2\) и ни на \(3\), то количество вариантов вычисляется по формуле KN=KN1 (т. е равно предыдущему значению) (\(1\)).
Если число делится только на \(2\), то количество вариантов вычисляется по формуле
KN/2=KN1+KN/2 (\(2\)).
Если число делится только на \(3\), то количество вариантов вычисляется по формуле
KN/3=KN1+KN/3 (\(3\)).
Если число делится и на \(2\), и на \(3\), то количество вариантов вычисляется по формуле
KN/2,3=KN1+KN/2+KN/3 (\(4\)).
 
Построим таблицу, в верхней строке будем писать числа \(N\), которые нужно получить, а в нижней строке — количество команд \(N\), которые мы получаем.
 
Схема с подписями.svg
Рис. \(3\). Таблица
 
Способ \(3\)
 
Разработаем программу, которая определит результат. В программе используем функцию, которая будет возвращать значения при определённых условиях.
 
Какие условия нужно рассмотреть?
 
стр1.jpgОбъявим функцию \(F\), переменная \(x\) — первое число (из которого нужно начать работу), \(y\) — второе число, которое нужно получить
стр1.jpg
2      d22.jpg
Проверим условие: если \(x\) окажется больше \(y\), то команд получения из одного числа другого нет, т. е. \(0\)
1 стр1.jpg
2      d22.jpg
3      д3.jpg
Проверим условие: если \(x\) равно \(у\), то команда есть, и она одна, поэтому возвращаем \(1\) команду
1 стр1.jpg
2     d22.jpg
3     д3.jpg
4     д4.jpg   
Данная строка возвращает значение функции. Как видим, в записях «\(x + 1\)», «\(x*2\)», «\(x*3\)» заложены условия задания:
1) прибавь \(1\);
2) умножь на \(2\);
3) умножь на \(3\)
1стр1.jpg
2    d22.jpg
3    д3.jpg
4    д4.jpg
5 д6.jpg
Вызов функции \(F\) с параметрами \(x=1\) и \(y=6\)
рез.jpgРезультат работы программы
 
Ответ: \(10\).
 
Решим задание из демоверсии \(2023\). 

Алгоритм решения задания похож на предыдущий, исключением является то, что добавляется условие «траектория вычислений содержит число \(10\) и не содержит \(17\)». Нам нужно ввести ещё ограничение: «если \(x\) окажется больше \(y\), то команд получения из одного числа другого нет, т. е. \(0\)», и при появлении числа \(17\) тоже значение функции будет равно \(0\). Условие «содержит число \(10\)» запишем в строке вызова функции
\(print(1,10)*(10,35))\).
 
Программа
 
1 стр1.jpgОбъявим функцию \(F\), переменная \(x\) — первое число (из которого нужно начать работу), \(y\) — второе число, которое нужно получить
1 стр1.jpg
2       д2(1).jpg
Проверим условие: если \(x\) окажется больше \(y\), то команд получения из одного числа другого нет, т. е. \(0\).
Также проверяем, если встречается \(17\), то возвращается \(0\)
1 стр1.jpg
2       д2(1).jpg
3       д3.jpg
Проверим условие: если \(x\) равно \(у\), то команда есть, и она одна, поэтому возвращаем \(1\) команду
1 стр1.jpg
2       д2(1).jpg
3       д3.jpg
4   ret.jpg       
Даная строка возвращает значение функции. Как видим, в записях «\(x+1\)», «\(x*2\)» заложены условия задания:
1) прибавь \(1\);
2) умножь на \(2\)
1 стр1.jpg
2      д2(1).jpg
3      д3.jpg
ret.jpg
5 вызов.jpg
Вызов функции \(F\) с параметрами. В данном задании вызов разбит на \(2\) части, так как условие — «включая \(10\)», поэтому запрашиваем два промежутка и перемножаем их
ответ.jpgВывод результата
 
Ответ: \(98\).