Теория:
Характеристика задания
1. Тип ответа: запись числовых значений.
1. Тип ответа: запись числовых значений.
2. Структура содержания задания: дана программа, содержащая ветвление и цикл.
3. Уровень сложности задания: повышенный.
4. Примерное время выполнения: \(7\) минут.
5. Количество баллов: \(1\).
6. Требуется специальное программное обеспечение: да.
7. Задание проверяет умение анализировать алгоритм, содержащий ветвление и цикл.
Пример задания (демоверсия \(2022\))
Ниже на четырёх языках программирования записан алгоритм. Получив на вход число \(x\), этот алгоритм печатает два числа — \(L\) и \(M\). Укажи наибольшее число \(x\), при вводе которого алгоритм печатает сначала \(4\), а потом \(5\).

Рис. \(1\). Пример задания
Как решать задание?
Спецификация контрольных измерительных материалов рекомендует решать эту задачу без использования специализированного программного обеспечения.
Проанализируем алгоритм.
| 1 | \(Q=9\) \(L=0\) while \(x>=Q\): \(L=L+1\) \(x=x-Q\) | Внутри цикла while \(Q\) не изменяется, перепишем эту часть программы, заменив \(Q\) её значением |
| 2 | \(Q=9\) \(L=0\) while \(x>=9\): \(L=L+1\) \(x=x-9\) | В \(L\) производится подсчёт, сколько раз число \(9\) содержится в заданном \(x\), а в \(x\) остаётся остаток от деления на \(9\) |
| 3 | \(M=x\) | Остаток записывается в \(M\) |
| 4 | if \(M<L\): \(M=L\) \(L=x\) | Если остаток от деления на \(9\) меньше, чем частное, то они меняются местами |
| 5 | print (\(L\)) print (\(M\)) | Числа выводятся в порядке возрастания |
Для нашей задачи неизвестно, выполнялись ли действия, меняющие значения, поэтому рассмотрим два варианта значений \(L\) и \(M\), предшествующие \(4\)-й строке таблицы.
| \(L = 4\); \(M = 5\) | \(X=4*9+5=41\) |
| \(L = 5\); \(M = 4\) | \(X=5*9+4=49\) |
\(49\) — наибольшее, это и есть ответ задачи.
Действительно, для некоторых задач с узнаваемым алгоритмом этот способ решения применим. Например, для определения экстремумов квадратичной функции на отрезке или анализа и преобразования записей чисел в позиционной системе счисления, алгоритма Евклида для определения НОД двух натуральных чисел и других алгоритмов, перечисленных в «Кодификаторе проверяемых требований к результатам освоения основной образовательной программы среднего общего образования и элементов содержания для проведения единого государственного экзамена по информатике». Но если узнать алгоритм не удалось, то можно его исследовать, организовав в программе циклический перебор данных.
Идеально же сочетать оба подхода: проанализировать алгоритм с целью определения, какие преобразования он выполняет; если возможен перебор, определиться с границами интервала, в котором выполняется перебор, или подтвердить переборным решением аналитическое.
Напишем программу.
| 1 | for \(i\) in range (\(10\), \(150\)): \(x=i\) \(Q=9\) \(L=0\) | Организовали перебор. Начинаем перебор с числа \(10\), так как при меньшем исходном данном мы не «попадём» в цикл while. А вот число \(150\) выбрано произвольно. Если результат не будет достигнут, его придётся увеличивать |
| 2 | while \(x>=Q\): \(L=L+1\) \(x=x-Q\) \(M=x\) if \(M<L\): \(M=L\) \(L=x\) | Программа остаётся без изменений |
| 3 | if \(L= =4\) and \(M= =5\): print (\(i\)) | Вывод осуществляем только в том случае, если он соответствует условию задачи |
| 4 | ![]() | Результат работы программы |
