Шешімі: Исправление программы обработки цифр
На обработку поступает натуральное число, не превышающее $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 қадамПри вводе числа 507 программа последовательно рассматривает цифры 7, 0 и 5. Цифра 7 не подходит, цифра 0 подходит, но не превосходит начальное значение maxDigit = 0, а цифра 5 не подходит.
$$maxDigit = 0$$После завершения цикла проверяется условие maxDigit > 0. Оно ложно, поэтому программа выводит строку NO.
$$507 \rightarrow \text{NO}$$Пример трёхзначного числа, для которого программа выдаёт верный ответ, — 123. Подходящие цифры: 1, 2 и 3; максимальная из них равна 3, поэтому программа выводит 3.
$$\max(1,2,3)=3$$Первая ошибка состоит в начальном значении максимума. Если максимальная цифра, меньшая 5, равна 0, начальное значение 0 не позволяет присвоить эту цифру переменной maxDigit.
$$\texttt{maxDigit = 0} \rightarrow \texttt{maxDigit = -1}$$Вторая ошибка состоит в условии вывода. Значение 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 всё равно не будет корректно обработана.
Изменить несколько строк одновременно или переписать алгоритм вместо исправления ровно двух строк.