24

Исправление программы поиска цифры

ЕГЭ · Информатика · Задание 24 · Алгоритмы и исполнители
ВысокаяФИПИ89F10EРазвёрнутое решение≈ 15 минут

На обработку поступает натуральное число, не превышающее $10^9$. Нужно написать программу, которая выводит на экран максимальную цифру числа, кратную 5. Если в числе нет цифр, кратных 5, требуется вывести «NO». Программист написал программу неправильно. Программа приведена на языках Бейсик, Python, алгоритмическом языке, Паскаль и Си.

Напоминание: 0 делится на любое натуральное число.

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

Условие как в банке ФИПИ — открыть и сверить
Дайте развернутый ответ.

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

Напоминание: 0 делится на любое натуральное число.

Бейсик

Python

DIM N, DIGIT, MAXDIGIT AS LONG

INPUT N

MAXDIGIT = N MOD 10

WHILE N > 0

DIGIT = N MOD 10

IF DIGIT MOD 5 = 0 THEN

IF DIGIT > MAXDIGIT THEN

MAXDIGIT = DIGIT

END IF

END IF

N = N \ 10

WEND

IF MAXDIGIT = 0 THEN

PRINT "NO"

ELSE

PRINT MAXDIGIT

END IF

N = int(input())

maxDigit = N % 10

while N > 0:

digit = N % 10

if digit % 5 == 0:

if digit > maxDigit:

maxDigit = digit

N = N // 10

if maxDigit == 0:

print("NO")

else:

print(maxDigit)


Алгоритмический язык

Паскаль

алг

нач

цел N, digit, maxDigit

ввод N

maxDigit := mod(N,10)

нц пока N > 0

digit := mod(N,10)

если mod(digit, 5) = 0 то

если digit > maxDigit то

maxDigit := digit

все

все

N := div(N,10)

кц

если maxDigit = 0 то

вывод "NO"

иначе

вывод maxDigit

все

кон

var N,digit,maxDigit: longint;

begin

readln(N);

maxDigit := N mod 10;

while N > 0 do

begin

digit := N mod 10;

if digit mod 5 = 0 then

if digit > maxDigit then

maxDigit := digit;

N := N div 10;

end;

if maxDigit = 0 then

writeln('NO')

else

writeln(maxDigit)

end.

Си

#include <stdio.h>

int main()

{

int N, digit, maxDigit;

scanf("%d", &N);

maxDigit = N % 10;

while (N > 0)

{

digit = N % 10;

if (digit % 5 == 0)

if (digit > maxDigit)

maxDigit = digit;

N = N / 10;

}

if (maxDigit == 0)

printf("NO");

else

printf("%d",maxDigit);

return 0;

}


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

1. Напишите, что выведет эта программа при вводе числа 132.

2. Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт верный ответ.

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

1) выпишите строку, в которой сделана ошибка;

2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки.

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

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



Ответ

Это задание с развёрнутым решением: ответом считается запись хода решения, а не строка. Напишите решение на бумаге и сравните с разбором — там каждый шаг с обоснованием.

Открыть разбор
!
3 уровня: от лёгкого толчка до почти готового решения. Следующий открывается, когда прочитан предыдущий, — чтобы не перепрыгнуть сразу к ответу.
1Мягкая — с чего смотретьуровень 1 из 3

Пошагово рассмотрите цифры числа $132$, начиная с последней. Сравните начальное значение maxDigit с цифрами числа.

2Наводящая — какие числа считатьуровень 2 из 3

Начальное значение maxDigit не должно быть обычной цифрой, которая может оказаться больше подходящей цифры. Кроме того, значение 0 нельзя одновременно использовать как признак отсутствия подходящих цифр и как найденный ответ.

3Прямая — фактически решениеуровень 3 из 3

В Python начальную строку нужно заменить на maxDigit = -1, а проверку результата — на if maxDigit == -1:. Например, для числа 150 программа после исправления выводит 5.

Всё равно не складывается?Полное решение с обоснованием каждого шага — на отдельной странице.
Открыть решение

Задание 24 ЕГЭ, информатика

Задача из темы «Алгоритмы и исполнители»: в ней 432 задачи с ответом и разбором по шагам. В 24-м номере бланка — 80 задач.

Ответ можно проверить здесь же, а если не выходит — открыть подсказку или разбор. Регистрация не нужна.