Дано целое положительное число N. Необходимо найти наибольшее количество подряд идущих нулей в десятичной записи N. Например, для N = 2019 нужно получить ответ 1, а для N = 20100 ответ 2.
Для решения этой задачи ученик написал программу, но, к сожалению, его программа неправильная.
Ниже эта программа для Вашего удобства приведена на пяти языках программирования
| Бейсик | Python |
|---|---|
DIM N, M, K AS INTEGER INPUT N M = 0 K = 0 WHILE N >= 10 IF N MOD 10 = 0 THEN K = K + 1 ELSE K = 1 END IF IF K > 0 THEN M = K END IF N = N \ 10 WEND PRINT M
| n = int(input()) m = 0 k = 0 while n>=10: if n % 10 == 0: k += 1 else: k = 1 if k > 0: m = k n //= 10 print(m)
|
| Паскаль | Алгоритмический язык |
var n, m, k: integer; begin readln(n); m := 0; k := 0; while n >= 10 do begin if n mod 10 = 0 then k := k + 1 else k := 1; if k > 0 then m := k; n := n div 10; end; writeln(m) end.
| алг нач цел n, m, k ввод n m := 0 k := 0 нц пока n >= 10 если mod(n,10) = 0 то k := k + 1 иначе k := 1 все если k > 0 то m := k все n := div(n,10) кц вывод m кон |
| С++ | |
#include <iostream> using namespace std; int main() { int n, m, k; cin >> n; m = 0; k = 0; while (n >= 10) { if (n % 10 == 0) k += 1; else k = 1; if (k > 0) m = k; n /= 10; } cout << m; return 0; }
| |
Последовательно выполните следующее.
1. Приведите пример числа N, при котором программа выведет верный ответ. Укажите этот ответ.
2. Приведите пример числа N, при котором программа выведет неверный ответ. Укажите верный ответ и ответ программы.
3. Найдите в программе все ошибки (известно, что их не больше двух) и исправьте их. Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Достаточно указать ошибки и способ их исправления для одного языка программирования.
Обратите внимание: Вам нужно исправить приведённую программу, а не написать свою. Вы можете только заменять ошибочные строки, но не можете удалять строки или добавлять новые. Заменять следует только ошибочные строки: за исправления, внесённые в строки, не содержащие ошибок, баллы будут снижаться.
1. Примеры чисел, при вводе которых программа выводит верные ответы: 50 (ответ 1), 700 (ответ 2), 1000 (ответ 3).
2. Примеры чисел, при вводе которых программа выводит неверные ответы: 51 (правильный ответ 0, программа выводит 1), 701 (правильный ответ 1, программа выводит 2), 101 000 (правильный ответ 3, программа выводит 2).
3. Программа содержит две ошибки.
1) Неверный сброс счётчика нулей k. Из-за этой ошибки длина цепочки нулей, расположенных не в конце числа, оказывается на единицу больше верной.
2) Неверное условие нахождения более длинной цепочки. Из-за этой ошибки программа выводит длину не наибольшей, а последней найденной (самой левой) цепочки нулей.
Не является ошибкой условие цикла. Проверка n>=10 вместо n>=1 приводит к тому, что первая цифра числа не проверяется, но, поскольку ноль не может быть первой цифрой, это не влияет на правильность ответа.
Пример исправления для языка Паскаль:
Первая ошибка:
else k := 1;
Исправленная строка:
else k := 0;
Вторая ошибка:
if k > 0 then
Исправленная строка, способ 1:
if k > m then
Исправленная строка, способ 2:
if k >= m then
В программах на других языках ошибочные строки и их исправления аналогичны.
Незначительной опиской, не влияющей на оценку, следует считать отсутствие знаков после содержательной части исправления (например, точки с запятой в C++).

