Демоверсия егэ по информатике 2020. Решение задания 24

Задание 23. Вторая часть: программирование: Демоверсия егэ по информатике 2020: объяснение и решение


*** КАНАЛ ЮТЬЮБ ***
 
ЕГЭ по информатике -> ЕГЭ 2020 -> ЕГЭ 2020
 

Разбор 24 задания, вторая часть. Демоверсия егэ по информатике 2020, ФИПИ:

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var
  N, digit, minDigit: longint;
begin
  readln(N);   
  minDigit := N mod 10;   
  while N > 0 do
  begin
    digit := N mod 10;     
    if digit mod 2 = 0 then       
      if digit < minDigit then         
        minDigit := digit;     
    N := N div 10;   
  end;   
  if minDigit = 0 then     
    writeln('NO')   
  else     
  writeln(minDigit)
end.
Бейсик:

DIM N, DIGIT, MINDIGIT AS LONG 
INPUT N 
MINDIGIT = N MOD 10 
WHILE N > 0   
  DIGIT = N MOD 10   
  IF DIGIT MOD 2 = 0 THEN     
     IF DIGIT < MINDIGIT THEN       
        MINDIGIT = DIGIT     
     END IF   
  END IF   
  N = N \ 10 
WEND 
IF MINDIGIT = 0 THEN   
   PRINT "NO" ELSE   
   PRINT MINDIGIT 
END IF
Python:

N = int(input()) 
minDigit = N % 10 
while N > 0:
   digit = N % 10
   if digit % 2 == 0:
     if digit < minDigit:
       minDigit = digit
   N = N // 10
if minDigit == 0:
   print("NO")
else:
   print(minDigit)
С++:

#include <iostream> 
using namespace std; 
 
int main() {
   int N, digit, minDigit;
   cin >> N;
   minDigit = N % 10;
   while (N > 0) {
     digit = N % 10;
     if (digit % 2 == 0)
       if (digit < minDigit)
         minDigit = digit;
     N = N / 10;
   }
   if (minDigit == 0)
     cout << "NO" << endl;
   else
     cout << minDigit << endl;
   return 0;
 }

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

✍ Решение:
 

    1. Программа выведет число 1.
    2. Программа выдаёт правильный ответ, например, для числа 132.

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

    3. В программе есть две ошибки.
    Первая ошибка: неверная инициализация ответа (переменная minDigit). Строка с ошибкой:

    minDigit := N mod 10;

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

    minDigit := 10;

    Вместо 10 может быть использовано любое целое число, большее 8.
    Вторая ошибка: неверная проверка отсутствия чётных цифр.
    Строка с ошибкой:

    if minDigit = 0 then 

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

    if minDigit = 10 then 

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