Информатика ЕГЭ 24 задание разбор старое
На обработку поступает последовательность из четырёх целых неотрицательных чисел. Нужно написать программу, которая выводит на экран количество чисел, остаток от деления на 10 которых равен 0, и сумму таких чисел. Если таких чисел нет, требуется вывести на экран «NO». Программист написал программу неправильно.
var p, i, x, count: integer; begin count := 0; p := 0; for i := 1 to 4 do begin read(x); if x mod 10 = 0 then begin count := count + 1; p := x; end end; if p > 0 then begin writeln(count); writeln(p); end else writeln('NO') end.
Последовательно выполните следующее:
- Напишите, что выведет эта программа при вводе 13, 20, 37, 40.
- Приведите пример входных данных, при вводе которых программа выведет верный ответ. Среди вводимых чисел должно быть хотя бы одно, удовлетворяющее условию отбора. Укажите этот ответ.
- Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
В программе есть две ошибки. Исправления приведены для языка Pascal. 1) Неверное накопление суммы. Строка с ошибкой:
2) Неверная проверка наличия чисел в последовательности, удовлетворяющих условию. Строка с ошибкой:
Работа с цифрами числаТребовалось написать программу, которая получает на вход натуральное число N, не превосходящее 109, и выводит число, равное количеству цифр 4 в десятичной записи числа N. Программист написал программу неправильно. Ниже эта написанная им программа для Вашего удобства приведена на нескольких языках программирования. Паскаль:
var N: longint; R, d: integer; begin readln(N); R := 0; while N > 0 do begin d := N mod 10; if d <> 4 then R := R + d; N := N div 10; end; writeln(R); end.
DIM N AS LONG DIM R, d AS INTEGER INPUT N R = 0 WHILE N > 0 d = N MOD 10 IF d <> 4 THEN R = R + d END IF N = N \ 10 WEND PRINT R END
N = int(input()) R = 0 while N > 0: d = N % 10 if d != 4: R = R + d N = N // 10 print(R)
-
Последовательно выполните следующее:
Исправление ошибки должно затрагивать только строку, в которой находится ошибка. Для каждой ошибки:
- Программа выведет число 3.
Примечание для эксперта. Программа выводит сумму цифр, отличных от 4.
Первая ошибка: неверная проверка условия увеличения счетчика – переменной R. Строка с ошибкой:
Вторая ошибка: неверно увеличивается значение переменной R. Строка с ошибкой:
Дано натуральное число N, не превосходящее 10000. Требуется найти и напечатать минимальную четную цифру в десятичной записи числа N. Гарантируется, что в десятичной записи числа N есть хотя бы одна четная цифра. Для решения этой задачи ученик написал программу, но, к сожалению, его программа оказалась неверной.
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.
Последовательно выполните следующее:
- Напишите, что выведет эта программа при вводе числа 187.
- Приведите пример входного натурального числа, в десятичной записи которого есть хотя бы одна четная цифра, такого, что приведенная программа напечатает то, что требуется.
- Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
- При вводе числа 187 программа выведет 1.
- Например, число 4.
- Программа содержит две ошибки:
1) неверная инициализация mi; 2) неверная печать результата. Пример исправления для языка Паскаль:
Первая ошибка:
Исправленная строка:
Комментарий для экспертов: В качестве начального значения подходит любое число, большее 8. Инициализация правой цифрой числа является неверной, поскольку она может быть нечетной. Так, например, даже при условии исправления ошибки вывода инициализация mi правой цифрой для числа 187 даст неверный результат (7 вместо 8).
Вторая ошибка:
Исправленная строка:
Ученик написал программу, которая находит максимальную цифру заданного числа, кратную 6 (примечание: 0 кратен любому числу). Если таких чисел нет, то программа должна напечатать NO. Но его программа оказалась неверной.
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.
Последовательно выполните следующее:
- Напишите, что выведет эта программа при вводе числа 143.
- Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт верный ответ.
- Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой сделана ошибка и укажите, как исправить ошибку, т.е. приведите правильный вариант строки.
- Алгоритм предназначен для поиска максимальной цифры числа, кратной 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, иначе выводим максимальное число.
-
При вводе 143 на экран выведется цифра 3 .
🔔Дальнейшее объяснение НЕ нужно писать на экзамене:
- В четвертой строке программы в maxDigit сохранится крайняя справа цифра числа, т.е. 3.
- В цикле в условном операторе (строка 7) больше не найдется ни одной цифры, удовлетворяющей условию, т.е. ни 4, ни 1 не будут кратными 6.
- В результате программа выведет значение maxDigit, т.е. цифру 3.
Рассмотрим подробно каждый шаг:
🔔Дальнейшее объяснение НЕ нужно писать на экзамене:
в maxDigit сохранится цифра 6, которая максимальна в числе и кратна 6. 🔕
Делители числаДано натуральное число N, не превосходящее 1000. Среди всех его делителей, кратных трём, необходимо найти максимальный, не равный самому числу N, и напечатать его. Если у числа N нет делителей, кратных трём, то программа должна напечатать «Не существует». Для решения этой задачи ученик написал программу, но, к сожалению, его программа оказалась неверной.
var n, k, m: integer; begin read(n); m := 0; k := 3; while k <= n do begin if (k mod n = 0) then m := k; k := k + 3 end; if m <> 0 then writeln(m) else writeln('He существует') end.
Последовательно выполните следующее:
- Напишите, что выведет эта программа при вводе числа 15.
- Приведите пример натурального числа, при вводе которого приведённая программа напечатает то, что требуется.
- Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
- При вводе числа 15 программа выведет число 15.
- Например, число 2.
1) неверное условие цикла; 2) неверная проверка делимости n на k. Пример исправления для языка Паскаль: Первая ошибка:
Степень числаДано натуральное число N, не превосходящее 1000. Необходимо определить, является ли это число степенью числа 5. То есть требуется определить, существует ли такое целое число К, что 5 К = N, и вывести это число либо сообщение, что такого числа не существует. Для решения этой задачи ученик написал программу, но, к сожалению, его программа оказалась неверной.
var n, k: integer; begin read(n); k := 0; while n > 1 do begin k := k + 1; n := n div 5; end; if k > 0 then writeln(k) else writeln('He существует') end.
Последовательно выполните следующее:
- Напишите, что выведет эта программа при вводе числа 21.
- Приведите пример натурального числа, не превосходящего 1000, при вводе которого приведённая программа напечатает то, что требуется.
- Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
- При вводе числа 21 программа выведет число 2.
- Примеры чисел, при вводе которых программа выводит корректный ответ: 5, 25, 125, 625.
- Программа содержит две ошибки:
1) неверное условие цикла; 2) неверное условие при печати результата. Пример исправления для языка Паскаль: Первая ошибка:
Существует ли такое числоДано натуральное число N, не превосходящее 1000. Необходимо определить, существует ли такое натуральное число M, что N можно представить в виде произведения (M-1)(M+1). Если это возможно, то следует напечатать число M, в противном случае вывести сообщение, что такого числа не существует. Для решения этой задачи ученик написал программу, но, к сожалению, его программа оказалась неверной.
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.
Последовательно выполните следующее:
- Напишите, что выведет эта программа при вводе числа 3.
- Приведите пример натурального числа, при вводе которого приведенная программа напечатает то, что требуется.
- Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Достаточно указать ошибки и способ их исправления для одного языка программирования.