Демовариант ЕГЭ по информатике 2020 года, задание 24

Демовариант ЕГЭ по информатике 2020 года, задание 24

Задача 24

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

 ege 2020 21 1

ege 2020 21 2

ege 2020 21 3

Последовательно выполните следующее:

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

Для каждой ошибки:

1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки. Известно, что в тексте программы можно исправить ровно две строки так, чтобы она стала работать правильно.

Достаточно указать ошибки и способ их исправления для одного языка программирования.

Обратите внимание на то, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения.

Выполним программу для заданного числа 231, записывая записывая ход выполнения программы в таблицу:

  N minDigit Условие digit Вывод
readln(N); 231        
minDigit:=N mod 10; 1        
while N > 0     да    
digit:=N mod 10;       1  
if digit mod 2 = 0 then     нет    
N:=N div 10 23        
while N > 0     да    
digit:=N mod 10;       3  
if digit mod 2 = 0 then     нет    
N:=N div 10 2        
while N > 0     да    
digit:=N mod 10;       2  
if digit mod 2 = 0 then     да    
if digit < minDigit then     нет    
N:=N div 10 0        
while N > 0     нет    
if minDigit = 0 then     нет    
writeln(minDigit)         1

Ответ на первый вопрос:

При вводе числа 231, программа выведет число 1.

При ручной прокрутке мы увидели неправильную инициализацию переменной:

minDigit:= N mod 10;

Вместе с тем, неверно производится проверка отсутствия четных чисел:

if minDigit = 0 then

Соответственно, программа будет выдавать верный ответ, если вводимое число не содержит 0 (хотя 0 - четное число!), содержит хотябы одну четную цифру и наименьшая четная цифра числа не больше младшей (крайней правой) цифры числа или стоит последней.

Ответ на второй вопрос:

Программа выведет правильный ответ при вводе числа 128.

Неверные строки мы уже выявили, теперь необходимо определиться как их исправить.

Напомню, что рассматриваем мы четные цифры десятичного числа: 0, 2, 4, 6, 8. Именно среди этих цифр, присудствующих в исходном числе, программа выбирает минимальное значение.

В качестве первоначального максимума принято назначаеть предыдущее значение перед самым возможным малым числом (в зависимости от контекста задачи). А в качестве минимума — напротив, следующее после самого большого возможного числа.

В нашем случае максимально возможное четное число - 8, такмим образом переменная minDigit может быть инициализованная с любым значением большим 8.

Теперь разберемся с проверкой отсутствия четных цифр в числе. В данном случае логика проверки такова: если значение переменной minDigit осталось неизменным, это означает, что четные цыфры в числе отсутствуют и необходимо вывести "NO", в противном случае вывести значение пременной minDigit.

Ответ на третий вопрос:

В программе есть две ошибки.

Первая ошибка. Строка с ошибкой:

minDigit := N mod 10;

Верное исправление:

minDigit := 9;

Примечание: Вместо 9 может быть использовано любое число, болше 8.

Вторая ошибка. Строка с ошибкой:

if minDigit = 0 then

Ворное исправление:

if minDigit = 9 then

Примечание: Вместо 10 может быть другое число, большее 8, которое было положено в minDigit при исправлении первой ошибки, или проверка, что minDigit > 8.

Ответ на это задание должен быть записан следующим образом:

1. Программа выведет число 1.
2. Программа выведет правильный ответ для числа 128.
3. В программе есть две ошибки.

Первая ошибка. Строка с ошибкой:

minDigit := N mod 10;

Верное исправление:

minDigit := 9;

Вторая ошибка. Строка с ошибкой:

if minDigit = 0 then

Ворное исправление:

if minDigit = 9 then

Обратите внимание на то, что в ответе ниче лишнего писать не нужно. Ответ должен быть представлен так, как это это представлено выше.

Также стоит отметить, что название и версия языка программирования указывается только в том случае, если программа представлена на языке, отличном от предложенных в задании (Бейсик, Python, Алгоритмический язык, Паскаль, С++).

Подробная информация о четности нуля вы найдете здесь.

Демонстрационный вариант 2020 года

Выберите соответствующий номер задания в демонстрационном варианте ЕГЭ 2020 года

Информация

Все изображения, размещенные на сайте, изготовлены автором самостоятельно, а также взяты в сети Интернет из тех изображений, которые находятся в свободном доступе. Поиск изображений осуществлялся посредством "Яндекс. Картинки".

Индекс цитирования

Проект при поддержке компании RU-CENTER Рейтинг@Mail.ru

Версия сайта для слабовидящих