Консультация № 153864
10.12.2008, 23:53
0.00 руб.
0 2 1
Задача: Написать рекурсивную функцию для вычисления количества нечетных цифр данного целого числа.
Программа выполняется, но ответ не правильный. Где ошибка?
Program p1;
uses crt;
var K,i:integer;
function number(i:integer):integer;
var d:integer;
begin
K:=0;
repeat
d:=i mod 10;
if i mod 2=0 then K:=K+1;
i:=i div 10;
until i=0;
number:=K;
end;
begin
clrscr;
writeln('vvedite cislo');
readln(i);
writeln('ciotnih cifr =',number(K));
readln;
end.

Обсуждение

Неизвестный
11.12.2008, 00:00
общий
помогите плиз кто-нибудь
Неизвестный
11.12.2008, 00:15
общий
это ответ
Здравствуйте, Heion!
В данном примере считается количество четных цифр и нулей(это если считать сравнение остатка от деления i вместо d на десять опечаткой), для подсчета количества нечетных следует строку if i mod 2=0 then K:=K+1; заменить на if d mod 2<>0 then K:=K+1;
Однако в приведенном примере функция не является рекурсивной. В приложении код рекурсивного варианта вашей функции number.
Прошу учесть. что это лишь один из множества вариантов рекурсивной реализации поставленной задачи, он очень прост в записи, но достаточно сложен в отладке и требователен к ресурсам. Однако для задачи на понимае рекурсии ИМХО в самый раз!

Приложение:
function number(i:integer):integer;
begin
if i < 10 then
if i mod 2 <> 0 then number:=1
else number := 0
else number := number(i mod 10) + number(i div 10);
end;
Форма ответа