
В натуральном числе N (0 < N < 109) необходимо подсчитать количество цифр десятичной записи,
чётность которых совпадает с чётностью последней цифры числа N. Например, для N = 123 должен получиться ответ 2 (последняя цифра числа нечётная, а всего в записи числа две нечётные цифры: 1 и 3). Для решения этой задачи ученик написал программу, но, к сожалению, его программа неправильная. Ниже эта программа приведена на языке паскаль: 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. Последовательно выполните следующее. 1. Напишите, что выведет эта программа при вводе N = 1961. 2. Назовите минимальное N, большее 100, при котором программа выведет верный ответ. 3. Найдите в программе все ошибки (известно, что их не более двух). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде. Достаточно указать ошибки и способ их исправления для одного языка программирования. Обратите внимание: Вам нужно исправить приведённую программу, а не написать свою. Вы можете только заменять ошибочные строки, но не можете удалять строки или добавлять новые.

Ответы на вопрос

Итак программа вычисляет количество цифр, совпадающих с остатком от деления последней цифры на 2 без учета первой цифры, если она 1.
N = 1961: будет выведено 1 (первая единица не в счет, кроме неё в числе остается только одна единица)
2. N от 101 до 109 не подойдут: если число четное, не будет учтена последняя цифра, если нечетное – то первая.
N = 110 подходит: будет выведено 1.
3. Ошибки ясны из описания в пункте 1: сравниваются не остаток от деления и d, а цифры и d; если первая цифра 1, она не учитывается.
Исправления:
while N > 1 ... надо поменять на while N > 0 ...
if N mod 10 = d ... надо поменять на if N mod 2 = d ...



Давайте по порядку рассмотрим каждое из требований:
Для ввода N = 1961 программа выведет 3. Это означает, что она правильно учитывает количество цифр с чётностью, совпадающей с чётностью последней цифры числа N (в данном случае последняя цифра 1, и в числе есть 3 цифры с чётностью 1).
Минимальное N, при котором программа выведет верный ответ, равно 100. При этом N будет иметь только одну цифру, и программа должна вывести 1, что является правильным ответом.
Найдем ошибки в программе и предложим их исправление:
Ошибка 1: В строке
d := N mod 2;
программа определяет чётность последней цифры числа N неверно. Эта строка определяет чётность всего числа, а не его последней цифры. Исправим это, заменив наd := N mod 10;
.Ошибка 2: В строке
while N > 1 do begin
условиеN > 1
приведет к неправильной обработке последней цифры числа N, если N само по себе является однозначным числом. Исправим это, заменив наwhile N > 0 do begin
.Вот исправленная программа:
pascalvar N, k, d: integer; begin read(N); k := 0; d := N mod 10; while N > 0 do begin if N mod 10 = d then k := k + 1; N := N div 10; end; writeln(k) end.
Теперь программа правильно считает количество цифр, чётность которых совпадает с чётностью последней цифры числа N.


Похожие вопросы
Топ вопросов за вчера в категории Информатика







Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili