РУҚА
24

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

ЕГЭ · Информатика · Задание 24 · Системы счисления
ВысокаяФИПИ95321DРазвёрнутое решение≈ 15 минутРазбор в 6 шагов
Условие

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

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

Python
1N = int(input())
2minDigit = N % 10
3while N > 0:
4    digit = N % 10
5    if digit % 2 == 0:
6        if digit < minDigit:
7            minDigit = digit
8    N = N // 10
9if minDigit == 0:
10    print("NO")
11else:
12    print(minDigit)
Открыть задачу и решить самому
Дальше ответЕсли ещё решаете — начните с подсказок: они ведут к ответу, но не выдают его.
К подсказкам

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

6 шагов
1

При вводе 231 начальное значение minDigit равно последней цифре числа: 1. Затем программа рассматривает цифры 1, 3 и 2. Только цифра 2 является чётной, поэтому minDigit становится равным 2.

$$231 \to 1,\ 3,\ 2$$
2

После завершения цикла значение minDigit равно 2, поэтому программа выводит число 2.

$$2$$
3

Пример трёхзначного числа, для которого программа выдаёт верный ответ: 246. Чётные цифры этого числа — 2, 4 и 6, минимальная из них равна 2, и программа также выводит 2.

$$\min(2,4,6)=2$$
4

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

$$minDigit = 10$$
5

Вторая ошибка находится в условии проверки отсутствия чётных цифр. Значение 0 является чётной цифрой, поэтому проверять minDigit == 0 нельзя: в этом случае программа ошибочно выводит NO. После инициализации значением 10 именно 10 будет означать, что чётная цифра не встретилась.

$$if\ minDigit == 10:$$

Исправленный фрагмент программы содержит строки minDigit = 10 и if minDigit == 10:. Тогда цифра 0 сохраняется как найденный минимум и корректно выводится, а при отсутствии чётных цифр выводится NO.

$$0\ \text{— найденная цифра},\quad 10\ \text{— признак отсутствия чётных цифр}$$
Ответ

1) 2. 2) Например, 246. 3) Ошибки: minDigit = N % 10 заменить на minDigit = 10; if minDigit == 0: заменить на if minDigit == 10:.

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

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

Считать, что строка minDigit = N % 10 всегда корректно задаёт начальный минимум.

Предлагать заменить проверку minDigit == 0 на проверку отсутствия цифр, хотя 0 является чётной цифрой.

Указывать только одну ошибку вместо двух.

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

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

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

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

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