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




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

Дано натуральное число N (1 ≤ N ≤ 109). Необходимо найти и вывести наименьшую нечётную цифру в десятичной записи N или вывести сообщение «NO», если таких цифр нет.

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

Ниже эта программа для Вашего удобства приведена на пяти языках программирования.

 

 

БейсикPython

DIM N, DIGIT, MINDIGIT AS INTEGER

INPUT N

MINDIGIT = N MOD 10

WHILE N > 0

    DIGIT = N MOD 10

    IF DIGIT MOD 2 <> 0 THEN

        IF DIGIT < MINDIGIT THEN

            DIGIT = MINDIGIT

        END IF

    END IF

    N = N \ 10

WEND

IF MINDIGIT <= 9 THEN

    PRINT MINDIGIT

ELSE

    PRINT "NO"

END IF

END

n = int(input())

mindigit = n%10

while n > 0:

    digit = n % 10

    if digit%2 != 0:

        if digit < mindigit:

            digit = mindigit

    n = n // 10

if mindigit <= 9:

    print(mindigit)

else:

    print("NO")

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

var n, digit, mindigit: integer;

begin

    read(n);

    mindigit := n mod 10;

    while N > 0 do begin

        digit := n mod 10;

        if (digit mod 2 <> 0) then

            if digit < mindigit then

                digit := mindigit;

        n := n div 10;

    end;

    if mindigit <= 9 then

        then writeln(mindigit)

        else writeln('No')

end.

алг

нач

    цел n, digit, mindigit

    ввод n

    mindigit := mod(n,10)

     нц пока n > 0

        digit := mod(n,10)

        если mod(digit,2)<>0 то

            если digit < mindigit то

                digit = mindigit

            все

        все

        n := div(n,10)

     кц

     если mindigit <= 9

        то вывод mindigit

        иначе вывод "NO"

    все

кон

С++

#include <iostream>

using namespace std;

int main(){

    int n, digit, mindigit;

    cin >> n;

    mindigit = n%10;

    while (n > 0) {

        digit = n%10;

        if (digit%2 != 0)

            if (digit < mindigit)

                digit = mindigit;

        n = n / 10;

    }

    if (mindigit <= 9)

        cout << mindigit;

    else

        cout << "NO";

    return 0;

}

 

 

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

1. Напишите, что выведет эта программа при вводе N = 134.

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

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

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

Обратите внимание: Вам нужно исправить приведённую программу, а не написать свою. Вы можете только заменять ошибочные строки, но не можете удалять строки или добавлять новые. Заменять следует только ошибочные строки: за исправления, внесённые в строки, не содержащие ошибок, баллы будут снижаться.

Решение.

1. При вводе N = 134 программа выведет число 4.

2. Пример числа N, при котором программа выведет верный ответ — 45.

Программа содержит две ошибки.

1) Неверное объявление начального значения переменной mindigit.

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

 

Пример исправления для языка Паскаль:

 

Первая ошибка:

mindigit := n mod 10;

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

mindigit := 10;

 

Вторая ошибка:

digit := mindigit;

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

mindigit := digit;

 

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

Незначительной опиской, не влияющей на оценку, следует считать отсутствие служебных слов и знаков после содержательной части исправления.

Источник: ЕГЭ по информатике 28.05.2018. Основная волна, вариант А. Имаева — «Котолис».