РУҚА
24

Решение: Исправление программы обработки цифр

ЕГЭ · Информатика · Задание 24 · Основы программирования
ВысокаяФИПИ2312E4Развёрнутое решение≈ 15 минутРазбор в 6 шагов
Условие

На обработку поступает натуральное число, не превышающее $10^9$. Нужно написать программу, которая выводит на экран максимальную цифру этого числа, меньшую 5. Если в числе нет цифр, меньших 5, требуется вывести «NO». Программист написал программу неправильно. Рассмотрите приведённую ниже программу на языке Python.

```python
N = int(input())
maxDigit = 0
while N > 0:
digit = N % 10
if digit < 5:
if digit > maxDigit:
maxDigit = digit
N = N // 10
if maxDigit > 0:
print(maxDigit)
else:
print("NO")
```

Последовательно выполните следующие действия: определите, что выведет программа при вводе числа 507; приведите пример трёхзначного числа, при вводе которого программа, несмотря на ошибки, выдаёт верный ответ; найдите две ошибки программиста и исправьте их. Исправление каждой ошибки должно затрагивать только строку, в которой находится ошибка. Для каждой ошибки укажите исходную строку и правильный вариант строки.

Открыть задачу и решить самому
Дальше ответЕсли ещё решаете — начните с подсказок: они ведут к ответу, но не выдают его.
К подсказкам

Решение по шагам

6 шагов
1

При вводе числа 507 программа последовательно рассматривает цифры 7, 0 и 5. Цифра 7 не подходит, цифра 0 подходит, но не превосходит начальное значение maxDigit = 0, а цифра 5 не подходит.

$$maxDigit = 0$$
2

После завершения цикла проверяется условие maxDigit > 0. Оно ложно, поэтому программа выводит строку NO.

$$507 \rightarrow \text{NO}$$
3

Пример трёхзначного числа, для которого программа выдаёт верный ответ, — 123. Подходящие цифры: 1, 2 и 3; максимальная из них равна 3, поэтому программа выводит 3.

$$\max(1,2,3)=3$$
4

Первая ошибка состоит в начальном значении максимума. Если максимальная цифра, меньшая 5, равна 0, начальное значение 0 не позволяет присвоить эту цифру переменной maxDigit.

$$\texttt{maxDigit = 0} \rightarrow \texttt{maxDigit = -1}$$
5

Вторая ошибка состоит в условии вывода. Значение 0 является корректным найденным ответом, поэтому его нужно считать найденным.

$$\texttt{if maxDigit > 0:} \rightarrow \texttt{if maxDigit >= 0:}$$

После исправлений значение -1 означает, что подходящих цифр нет, а любое значение от 0 до 4 означает, что подходящая цифра найдена.

Ответ

1) При вводе 507 программа выводит NO. 2) Например, 123: программа выводит 3, и это верный ответ. 3) Исправления: `maxDigit = 0` заменить на `maxDigit = -1`; `if maxDigit > 0:` заменить на `if maxDigit >= 0:`.

Этот ответ получен в разборе, но не сверен с официальным ключом из банка — проверьте выкладки, прежде чем заучивать результат.

Где здесь ошибаются

Считать, что при вводе 507 программа выводит 0, не учитывая ошибочное условие maxDigit > 0.

Предложить изменить условие digit < 5, хотя оно задано правильно.

Заменить начальное значение maxDigit на 1, из-за чего цифра 0 всё равно не будет корректно обработана.

Изменить несколько строк одновременно или переписать алгоритм вместо исправления ровно двух строк.

Закрепить приёмВ теме «Основы программирования» ещё 159 задач — с ответом и таким же разбором.
Тренироваться

Как решать задание 24 ЕГЭ, информатика

Разбор этой задачи разложен на 6 шагов: видно, откуда берётся каждое число и где теряется балл. Ответ приведён рядом с выкладками, а не вместо них.

Задача из темы «Основы программирования»: в ней 160 задач, и у каждой есть такой же разбор. Регистрация не нужна.