Информатика ЕГЭ 24 задание разбор

24-е задание: «Вторая часть: программирование»
Уровень сложности — повышенный,
Максимальный балл — 3,
Примерное время выполнения — 30 минут.

Разбор 24 задания ЕГЭ по информатике 2017 года (один из вариантов со слов выпускника):

Ученик написал программу, которая находит максимальную цифру заданного числа, кратную 6 (примечание: 0 кратен любому числу). Если таких чисел нет, то программа должна напечатать NO. Но его программа оказалась неверной.

1
2
3
4
5
6
7
8
9
10
11
12
13
var N,digit,maxDigit:integer;
begin 
readln(N);
maxDigit := N mod 10;
while N>0 do begin 
    digit:= N mod 10;
    if (digit > maxDigit) and (digit mod 6 = 0) then 
      maxDigit:=digit;
    N:=N div 10;
    end;
if maxDigit = 0 then writeln('NO')
else writeln(maxDigit);
end.

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

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

Показать решение:

Рассмотрим алгоритм:

  • Алгоритм предназначен для поиска максимальной цифры числа, кратной 6.
  • Переменная maxDigit предусмотрена для хранения максимальной цифры. Изначально ей в программе присвоена крайняя справа цифра (разряд единиц) — maxDigit := N mod 10;. Т.е. остаток при делении числа на 10 — это и есть крайняя справа цифра.
  • В цикле пока N > 0:
  • от N «отсекается» каждая цифра справа и сохраняется в переменную digit;
  • осуществляется проверка: если «отсеченная» цифра больше максимальной (digit > maxDigit) и кратна 6 (digit mod 6 = 0), то устанавливаем ее максимальной (maxDigit:=digit;);
  • сохраняем N без «отсеченной» цифры (N:=N div 10; , т.е. целочисленно делим на 10, таким образом отсекая цифру справа).
  • После цикла осуществляется проверка: если максимальным числом был 0, то выводим слово NO, иначе выводим максимальное число.

Решение заданий:

  1. При вводе 143 на экран выведется цифра 3.
  2. 🔔Дальнейшее объяснение НЕ нужно писать на экзамене:

    • В четвертой строке программы в maxDigit сохранится крайняя справа цифра числа, т.е. 3.
    • В цикле в условном операторе (строка 7) больше не найдется ни одной цифры, удовлетворяющей условию, т.е. ни 4, ни 1 не будут кратными 6.
    • В результате программа выведет значение maxDigit, т.е. цифру 3.
    • Рассмотрим подробно каждый шаг:

      maxDigit := 3;
      1 шаг:
      while 143>0 do begin 
          digit:= 3;
          if (3 > 3)and (3 mod 6 = 0) then условие ложно
            maxDigit:=digit; - не выполняется
          N:=14;
      end;
      
      2 шаг:
      while 14>0 do begin 
          digit:= 4;
          if (4 > 3)and (4 mod 6 = 0) then условие ложно
            maxDigit:=digit; - не выполняется
          N:=1;
      end;
      🔕
      3 шаг:
      while 1>0 do begin 
          digit:= 1;
          if (1 > 3)and (1 mod 6 = 0) then условие ложно
            maxDigit:=digit; - не выполняется
          N:=0;
      end;
      
      4 шаг:
      while 0>0 do begin  условие ложно
      ...
      end;
      if maxDigit = 0 then условие ложно
         writeln('NO') - не выполняется
      else writeln(maxDigit); - вывод числа 3
      

    🔕

  3. При вводе любого числа, крайней справа цифрой которого является цифра 6, а остальные цифры будут меньше либо равны ей, программа выдаст правильный результат. Например, ввод 126 вернет верный результат.
  4. 🔔Дальнейшее объяснение НЕ нужно писать на экзамене:

    в maxDigit сохранится цифра 6, которая максимальна в числе и кратна 6.
    🔕

  5. 1) неверная инициализация переменной maxDigit:
    ошибочная строка: maxDigit := N mod 10; (№ 4)
    исправление: maxDigit := -1;
    🔔Дальнейшее объяснение НЕ нужно писать на экзамене:
    Изначально максимальным необходимо назначить наименьшую возможную цифру, которая не кратна 6 (0 кратен любому числу, поэтому -1)
    🔕
    2) неверное условие:
    ошибочная строка: if maxDigit = 0 then (№ 11)
    исправление: if maxDigit = -1 then
    🔔Дальнейшее объяснение НЕ нужно писать на экзамене:
    Вытекает из предыдущего пункта
    🔕

📹 Видео


Разбор 24 задания ЕГЭ по информатике 2017 года ФИПИ вариант 5 (Крылов С.С., Чуркина Т.Е.):

Дано натуральное число N, не превосходящее 1000. Необходимо определить, существует ли такое натуральное число M, что N можно представить в виде произведения (M-1)(M+1). Если это возможно, то следует напечатать число M, в противном случае вывести сообщение, что такого числа не существует.
Для решения этой задачи ученик написал программу, но, к сожалению, его программа оказалась неверной.

1
2
3
4
5
6
7
8
9
10
11
var n, m: integer; 
begin 
   read(n); 
   m:=2;
   while ((m-1)*(m+1) = n) and (m<n) do 
      m:=m+1;
   if m < n then
    writeln(n)
   else
    writeln('Не существует') 
end.

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

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

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

Показать решение:

  1. Программа выведет ‘Не существует’
  2. 🔔Дальнейшее объяснение НЕ нужно писать на экзамене:

    n = 3;
    m = 2;
    
    1 шаг:
    while ((2-1)*(2+1) = 3) and (2<3) do условие истинно
      m:=2+1;
    
    2 шаг:
    while ((3-1)*(3+1) = 3) and (2<3) do условие ложно
      ...
    if 3 < 3 then  условие ложно
        writeln(n) не выполняется 
       else
        writeln('Не существует') выполняется
    end.
    

    🔕

  3. При вводе 2 (выведет на экран ‘Не существует‘)
  4. 1) ошибочное условие цикла:
    ошибочная строка: while ((m-1)*(m+1) = n)
    исправление: while ((m-1)*(m+1) <> n)
    2) ошибочный вывод:
    ошибочная строка: writeln(n)
    исправление: writeln(m)

📹 Видео


Решение 24 задания ЕГЭ по информатике 2018 года ФИПИ вариант 1 (Крылов С.С., Чуркина Т.Е., «Типовые экзаменационные варианты», 10 вариантов):

Дано натуральное число N, не превосходящее 10000. Требуется найти и напечатать минимальную четную цифру в десятичной записи числа N. Гарантируется, что в десятичной записи числа N есть хотя бы одна четная цифра.
Для решения этой задачи ученик написал программу, но, к сожалению, его программа оказалась неверной.

1
2
3
4
5
6
7
8
9
10
11
12
13
var
  n, mi, m: integer;
begin
  read(n);
  mi := n mod 10;
  while n > 0 do begin
    m := n mod 10;
    if (m < mi) and (m mod 2 = 0) 
    then mi := m;
    n = n div 10
  end;
  writeln(m)
end.

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

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

Показать решение:

  1. При вводе числа 187 программа выведет 1.
  2. Например, число 4.
  3. Программа содержит две ошибки:
  4. 1) неверная инициализация mi;
    2) неверная печать результата.
    Пример исправления для языка Паскаль:
      
    Первая ошибка:

    mi:=n mod 10;

    Исправленная строка:

    mi:=8;

    Комментарий для экспертов: В качестве начального значения подходит любое число, большее 8. Инициализация правой цифрой числа является неверной, поскольку она может быть нечетной. Так, например, даже при условии исправления ошибки вывода инициализация mi правой цифрой для числа 187 даст неверный результат (7 вместо 8).
     
    Вторая ошибка:

    writeln(m)

    Исправленная строка:

    writeln (mi)

Поделитесь уроком с коллегами и друзьями:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*
*

Вставить формулу как
Блок
Строка
Дополнительные настройки
Цвет формулы
Цвет текста
#333333
Используйте LaTeX для набора формулы
Предпросмотр
\({}\)
Формула не набрана
Вставить