24

Решение: Исправление программы поиска цифры

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

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

Последовательно определите результат работы программы при вводе числа 125, приведите пример трёхзначного числа, при вводе которого программа выдаёт верный ответ, а затем найдите все ошибки в программе. Для каждой ошибки укажите строку с ошибкой и её исправленный вариант. Достаточно выполнить исправления для одного языка программирования. Каждая ошибка затрагивает только одну строку и исправляется без изменения других строк.

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

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

5 шагов
1

При вводе числа 125 программа сначала присваивает minDigit значение последней цифры: 5. Затем она проверяет цифры 5, 2 и 1. Ни одна из них не кратна 6, поэтому minDigit не изменяется и программа выводит 5.

2

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

3

Первая ошибка находится в строке начальной инициализации minDigit. Последняя цифра может быть не кратна 6, поэтому использовать её как начальное значение минимума нельзя. Кроме того, при отсутствии подходящих цифр нужен отдельный признак.

$$minDigit := 9$$
4

Вторая ошибка находится в условии проверки отсутствия подходящей цифры. После инициализации значением 9 отсутствие найденной цифры определяется значением 9. Если найдена цифра 0, программа должна вывести 0, а не NO.

$$if minDigit = 9 then$$

Например, исправленный фрагмент на Паскале имеет вид: minDigit := 9; далее поиск оставляется без изменений; затем используется условие if minDigit = 9 then writeln('NO') else writeln(minDigit).

Ответ

1) При вводе 125 программа выводит 5. 2) Например, при вводе 126 программа выдаёт правильный ответ 6. 3) Для Паскаля: minDigit := 9; вместо if minDigit = 0 then записать if minDigit = 9 then. Это исправляет начальную инициализацию и проверку отсутствия подходящей цифры.

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

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

Считать, что для числа 125 программа выводит NO, хотя minDigit изначально получает значение 5.

Предложить число 120 как пример корректной работы исходной программы: правильный ответ для него равен 0, а программа выводит NO.

Исправить только начальное значение minDigit и не изменить условие проверки minDigit = 0.

Использовать значение 0 как признак отсутствия найденной цифры, хотя 0 сама является цифрой, кратной 6.

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

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

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

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