Решение: Исправление ошибки в программе
На обработку поступает натуральное число, не превышающее $10^9$. Нужно написать программу, которая выводит на экран минимальную цифру числа, делящуюся на 3. Если в числе нет цифр, делящихся на 3, на экран требуется вывести «NO». Напоминание: 0 делится на любое натуральное число.
Программа на языке Python:
N = int(input())
minDigit = 9
while N > 0:
digit = N % 10
if digit % 3 == 0:
if digit < minDigit:
digit = minDigit
N = N // 10
if minDigit <= 9:
print(minDigit)
else:
print("NO")
Последовательно выполните следующие действия:
1. Напишите, что выведет эта программа при вводе числа 143.
2. Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт верный ответ.
3. Найдите все ошибки в этой программе. Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки выпишите строку, в которой сделана ошибка, и приведите правильный вариант этой строки. Исправление должно затрагивать только строку, в которой находится ошибка.
Решение по шагам
5 шаговРазложим число 143 на цифры. Сначала обрабатывается цифра 3. Она делится на 3, и выполняется условие digit < minDigit, так как 3 < 9.
$$digit = 3,\quad minDigit = 9$$Вместо изменения минимальной найденной цифры программа изменяет саму переменную digit: выполняется строка digit = minDigit. Поэтому minDigit остаётся равной 9.
$$digit = 9,\quad minDigit = 9$$После обработки остальных цифр значение minDigit не изменяется, поэтому программа выводит число 9.
$$9$$Пример трёхзначного числа, для которого программа выдаёт верный ответ, — 111. В его записи нет цифр, делящихся на 3, поэтому правильный ответ — NO. Программа также выводит NO, поскольку minDigit не изменяется и после цикла равно 9.
Единственная ошибка находится в строке, которая должна сохранять найденную минимальную цифру в переменной minDigit. Исправление не требует изменения других строк.
$$digit = minDigit\ \longrightarrow\ minDigit = digit$$1) 9. 2) Например, 111. 3) Ошибочная строка: digit = minDigit. Правильный вариант: minDigit = digit.
Этот ответ получен в разборе, но не сверен с официальным ключом из банка — проверьте выкладки, прежде чем заучивать результат.
Где здесь ошибаются
Указать для числа 143 вывод 3, не проследив фактическое выполнение ошибочной программы.
Исправить условие digit < minDigit вместо строки присваивания.
Предложить переписать программу целиком, хотя требуется исправить только ошибочную строку.
Привести пример числа, не являющегося трёхзначным.