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

