Решение: Исправление программы обработки цифр
На обработку поступает натуральное число, не превышающее $10^9$. Нужно написать программу, которая выводит на экран сумму цифр числа, больших 5. Если в числе нет цифр, больших 5, требуется вывести на экран «NO». Программист написал программу неправильно. Ниже приведена программа на нескольких языках программирования: Бейсик, Python, алгоритмический язык, Паскаль и C++.
Последовательно выполните следующие действия: напишите, что выведет программа при вводе числа 748; приведите пример такого трёхзначного числа, при вводе которого программа выдаёт верный ответ; найдите все ошибки в программе. Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки выпишите строку, в которой сделана ошибка, и приведите правильный вариант этой строки. Достаточно указать ошибки и способ их исправления для одного языка программирования. Требуется найти ошибки в имеющейся программе, а не написать другую программу.
Решение по шагам
6 шаговПри вводе числа 748 сначала выполняется присваивание sum = N % 10, поэтому sum получает значение 8.
$$sum = 748 \bmod 10 = 8$$В цикле цифры обрабатываются справа налево: 8, 4, 7. При цифре 8 переменная sum получает значение 8, при цифре 4 не изменяется, а при цифре 7 получает значение 7.
$$sum = 7$$Следовательно, программа выводит число 7. Правильная сумма цифр числа 748, больших 5, равна 8 + 7 = 15, поэтому результат работы программы неверен.
$$8 + 7 = 15$$Пример трёхзначного числа, для которого программа выдаёт верный ответ, — 127. Единственная цифра, большая 5, — это 7, и программа также выводит 7.
Первая ошибка: начальное значение суммы задаётся последней цифрой числа. Нужно начинать накопление суммы с нуля.
$$sum = 0$$Вторая ошибка: при обнаружении цифры, большей 5, прежняя сумма заменяется этой цифрой. Нужно прибавлять цифру к накопленной сумме.
$$sum = sum + digit$$Для 748 программа выведет 7. Пример подходящего трёхзначного числа: 127. Ошибки в Python: строку «sum = N % 10» заменить на «sum = 0», а строку «sum = digit» — на «sum = sum + digit».
Этот ответ получен в разборе, но не сверен с официальным ключом из банка — проверьте выкладки, прежде чем заучивать результат.
Где здесь ошибаются
Указать правильную сумму для 748 вместо результата работы ошибочной программы.
Исправить только строку с присваиванием sum = digit и не исправить начальную инициализацию суммы.
Предложить полностью новую программу вместо исправления только ошибочных строк.
Привести пример числа, для которого программа случайно выдаёт неверный ответ.