Решение: Исправление программы обработки цифр
На обработку поступает натуральное число, не превышающее $10^9$. Нужно написать программу, которая выводит на экран количество цифр этого числа, делящихся на 3. Если в числе нет цифр, делящихся на 3, на экран требуется вывести «NO».
Напоминание: 0 делится на любое натуральное число.
Программист написал программу неправильно. Последовательно выполните следующие действия:
1. Напишите, что выведет эта программа при вводе числа 145.
2. Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт верный ответ.
3. Найдите все ошибки в этой программе. Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки выпишите строку, в которой сделана ошибка, и приведите правильный вариант этой строки.
Достаточно указать ошибки и способ их исправления для одного языка программирования. Требуется найти ошибки в имеющейся программе, а не написать свою программу, возможно, использующую другой алгоритм решения. Исправление каждой ошибки должно затрагивать только строку, в которой находится ошибка.
Решение по шагам
6 шаговПри вводе числа 145 программа последовательно рассматривает цифры 5, 4 и 1. Ни одна из них не делится на 3.
Переменная count изначально равна 1 и не изменяется. Поэтому условие count == 0 ложно, и программа выводит число 1.
Чтобы программа выдавала правильный ответ для трёхзначного числа, можно взять 102. В нём только одна цифра, 0, делится на 3. Программа также выдаёт 1, поэтому для этого числа результат верен.
Первая ошибка находится в строке count = 1. Счётчик найденных цифр должен начинаться с нуля.
$$count = 0$$Вторая ошибка находится в строке count = count + digit. При обнаружении подходящей цифры нужно увеличить количество цифр на единицу, а не прибавлять значение цифры.
$$count = count + 1$$Остальные строки корректно извлекают цифры числа, проверяют делимость на 3 и выводят NO при отсутствии подходящих цифр.
Для 145 программа выведет 1; пример трёхзначного числа — 102; исправления: count = 1 заменить на count = 0, а count = count + digit — на count = count + 1.
Этот ответ получен в разборе, но не сверен с официальным ключом из банка — проверьте выкладки, прежде чем заучивать результат.
Где здесь ошибаются
Указать, что при вводе 145 программа выводит NO, не учитывая ошибочную инициализацию count.
Заменить count = count + digit на подсчёт суммы цифр вместо увеличения количества найденных цифр на единицу.
Не учесть, что 0 делится на 3, и привести неподходящий пример трёхзначного числа.
Записать исправления сразу для нескольких языков, хотя достаточно одного языка.