СДАМ ГИА: РЕШУ ЕГЭ
Образовательный портал для подготовки к экзаменам
Информатика
≡ информатика
сайты - меню - вход - новости




Задания
Версия для печати и копирования в MS Word
Задание 24 № 13751

На обработку поступает натуральное число, не превышающее 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)

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

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.

алг

нач

    цел 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

    все

кон

Си++

#include <iostream>

using namespace std;

 

int main() {

        long N, digit, maxDigit;

        cin >> 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)

            cout << "NO" << endl;

        else

            cout << maxDigit << endl;

        return 0;

}

 

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

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

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

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

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

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

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

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

Решение.

1. Программа выведет число 2.

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

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

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

Строка с ошибкой:

maxDigit := N mod 10;

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

maxDigit := -1;

Вместо -1 может быть использовано любое число, меньшее 0.

Вторая ошибка. Неверная проверка отсутствия цифр, кратных 5.

Строка с ошибкой:

ifmaxDigit = 0 then

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

ifmaxDigit = -1 then

Вместо -1 может быть другое число, меньшее 0, которое было положено в maxDigit при исправлении первой ошибки, или проверка, что

maxDigit< 0

Обратите внимание! В задаче требовалось выполнить четыре действия:

1) указать, что выведет программа при конкретном входном числе;

2) указать пример входного числа, при котором программа выдаёт верный ответ;

3) исправить первую ошибку;

4) исправить вторую ошибку.

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

Для действий 3) и 4) ошибка считается исправленной, если выполнены оба следующих условия:

а) правильно указана строка с ошибкой;

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

Источник: Де­мон­стра­ци­он­ная вер­сия ЕГЭ—2018 по информатике.