Найдите ошибки в записи программы перепишите программу в исправленном виде program example
На обработку поступает последовательность из четырёх целых неотрицательных чисел. Нужно написать программу, которая выводит на экран количество чисел, остаток от деления на 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) Неверная проверка наличия чисел в последовательности, удовлетворяющих условию.
Строка с ошибкой:
Работа с цифрами числа
24 задание досрочного экзамена 2020 г, ФИПИ:Требовалось написать программу, которая получает на вход натуральное число 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)
Исправление ошибки должно затрагивать только строку, в которой находится ошибка. Для каждой ошибки:
Примечание для эксперта. Программа выводит сумму цифр, отличных от 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).
Вторая ошибка:
Исправленная строка:
Разбор 24 задания ЕГЭ по информатике 2017 года (один из вариантов со слов выпускника):Ученик написал программу, которая находит максимальную цифру заданного числа, кратную 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.
Последовательно выполните следующее:
- В четвертой строке программы в maxDigit сохранится крайняя справа цифра числа, т.е. 3.
- В цикле в условном операторе (строка 7) больше не найдется ни одной цифры, удовлетворяющей условию, т.е. ни 4, ни 1 не будут кратными 6.
- В результате программа выведет значение maxDigit, т.е. цифру 3.
Рассмотрим подробно каждый шаг:
Делители числа
Дано натуральное число 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.
Пример исправления для языка Паскаль:
Первая ошибка:
Степень числа
Разбор 24 задания ЕГЭ по информатике 2019 года ФИПИ вариант 9 ("Типовые экзаменационные варианты", Крылов С.С., Чуркина Т.Е.):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) неверное условие при печати результата.
Пример исправления для языка Паскаль:
Первая ошибка:
Существует ли такое число
Разбор 24 задания ЕГЭ по информатике 2017 года ФИПИ вариант 5 (Крылов С.С., Чуркина Т.Е.):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.
- Приведите пример натурального числа, при вводе которого приведенная программа напечатает то, что требуется.
- Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Достаточно указать ошибки и способ их исправления для одного языка программирования.
Читайте также: