Предмет: Информатика,
автор: KsiJanson
В натуральном числе 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. Найдите в программе все ошибки (известно, что их не более двух). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде. Достаточно указать ошибки и способ их исправления для одного языка программирования. Обратите внимание: Вам нужно исправить приведённую программу, а не написать свою. Вы можете только заменять ошибочные строки, но не можете удалять строки или добавлять новые.
Ответы
Автор ответа:
5
1. В переменную d записывается остаток от деления числа 2, который совпадает с остатком от деления последней цифры на 2; k инициализируется нулем. Затем, пока N > 1, последняя цифра числа сравнивается с d, и если она совпадает с d, k увеличивается на 1. После сравнения последняя цифра отбрасывается. Результат подсчета выводится на экран.
Итак программа вычисляет количество цифр, совпадающих с остатком от деления последней цифры на 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 ...
Итак программа вычисляет количество цифр, совпадающих с остатком от деления последней цифры на 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 ...
KsiJanson:
Огромное спасибо выручили из бяды!
Похожие вопросы
Предмет: Биология,
автор: katia4331
Предмет: Математика,
автор: annakaraleva45
Предмет: Английский язык,
автор: pusshha1612
Предмет: Химия,
автор: Арсенийotrix
Предмет: Геометрия,
автор: akopyltsova