24

Решение: Поиск ошибок в программе

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

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

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

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

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

5 шагов
1

При вводе 105 программа последовательно рассматривает цифры 5, 0 и 1. Цифра 0 кратна 3, но переменная maxDigit изначально равна 0, поэтому условие digit > maxDigit для цифры 0 ложно.

2

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

3

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

4

Ошибка 1: начальное значение maxDigit равно 0. Из-за этого цифра 0 не может быть записана в переменную как найденная подходящая цифра. В Python правильная строка: maxDigit = -1.

Ошибка 2: проверка maxDigit > 0 не позволяет вывести найденную цифру 0. После начальной инициализации значением -1 правильная строка в Python: if maxDigit >= 0:.

Ответ

1) При вводе 105 программа выводит NO. 2) Например, при вводе 123 программа выводит 3. 3) В Python нужно заменить maxDigit = 0 на maxDigit = -1 и if maxDigit > 0: на if maxDigit >= 0:.

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

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

Считать, что программа при вводе 105 выводит 0, хотя условие maxDigit > 0 приводит к выводу NO.

Исправить только условие вывода, не изменив начальное значение maxDigit.

Предложить новый алгоритм вместо исправления конкретных строк исходной программы.

Не учитывать цифру 0 как цифру, кратную 3.

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

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

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

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