Дано натуральное число 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 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;
В программах на других языках ошибочные строки и их исправления аналогичны.
Незначительной опиской, не влияющей на оценку, следует считать отсутствие служебных слов и знаков после содержательной части исправления.

