В натуральном числе N (0 < N < 109) необходимо подсчитать количество цифр десятичной записи, чётность которых совпадает с чётностью последней цифры числа N. Например, для N = 123 должен получиться ответ 2 (последняя цифра числа нечётная, а всего в записи числа две нечётные цифры: 1 и 3).
Для решения этой задачи ученик написал программу, но, к сожалению, его программа неправильная.
Ниже эта программа для Вашего удобства приведена на пяти языках программирования.
| Бейсик | Python |
|---|---|
DIM N, K, D AS INTEGER INPUT N K = 0 D = N MOD 2 WHILE N > 1 IF N MOD 10 = D THEN K = K + 1 END IF N = N \ 10 WEND PRINT K END
| N = int(input()) k = 0 d = N % 2 while N > 1: if N % 10 == d: k += 1 N = N // 10 print(k)
|
| Паскаль | Алгоритмический язык |
var N, k, d: integer; begin read(N); k := 0; d := N mod 2; while N > 1 do begin if N mod 10 = d then k := k + 1; N := N div 10 end; writeln(k) end.
| алг нач цел N, k, d ввод N k := 0 d := mod(N,2) нц пока N > 1   если mod(N,10) = d   то k := k + 1   все   N := div(N,10) кц вывод k кон |
| С++ | |
#include <iostream> using namespace std; int main(){ nt N, k, d; cin >> N; k = 0; d = N % 2; while (N > 1) { if (N % 10 == d) ++k; N = N / 10;  } cout << k; return 0; }
| |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе N = 1961.
2. Назовите минимальное N, большее 100, при котором программа выведет верный ответ.
3. Найдите в программе все ошибки (известно, что их не более двух). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Достаточно указать ошибки и способ их исправления для одного языка программирования.
Обратите внимание: Вам нужно исправить приведённую программу, а не написать свою. Вы можете только заменять ошибочные строки, но не можете удалять строки или добавлять новые. Заменять следует только ошибочные строки: за исправления, внесённые в строки, не содержащие ошибок, баллы будут снижаться.
1. При вводе N = 1961 программа выведет число 1.
2. Минимальное N > 100, при котором программа выдаёт верный ответ, равно 110. Программа выдаёт верный ответ 1. При вводе числа 101 программа выдаёт ответ 1. При вводе чисел от 102 до 109 программа вместо верного ответа 2 выдаёт ответ 1 для чётных чисел и ответ 0 для нечётных.
Программа содержит две ошибки.
1) Неверное условие цикла. Если старшая цифра числа равна 1, то эта цифра не будет проверяться и подсчитываться.
2) Неверная проверка. С чётностью последней цифры числа сравнивается не чётность очередной цифры, а сама эта цифра.
Пример исправления для языка Паскаль:
Первая ошибка, способ 1:
while N > 1 do begin
Исправленная строка:
while N > 0 do begin
Первая ошибка, способ 2:
while N > 1 do begin
Исправленная строка:
while N >= 1 do begin
Вторая ошибка:
if N mod 10 = d
Исправленная строка:
if N mod 2 = d
В программах на других языках ошибочные строки и их исправления аналогичны.
Незначительной опиской, не влияющей на оценку, следует считать отсутствие служебных слов и знаков после содержательной части исправления.

