Помощь - Поиск - Пользователи - Календарь
Полная версия: Рекурсия
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Guest
Помогите оформиить данну задачу с помощью рекурсии(делится число на 3 или нет):
Uses
Crt;
var
p:longint;
s:byte;
Procedure Input;
begin
write('p= ');
readln(p);
end;
Procedure Rass4et;
begin
s:=0;
repeat
s:=s+p mod 10;
until (p<>1);
end;
Procedure Output;
begin
if (s mod 3)=0 then
WriteLn('Yes')
else('No');
end;
Begin
ClrScr;
Input;
Rass4et;
Output;
ReadKey;
End.
Гость
Неужели никто не подскажит
volvo
А что, в данном виде программа правильно решает задачу? Мне почему-то так не кажется... Кроме всего прочего - она вообще не откомпилируется. Так что сначала реши задачу правильно, а потом будешь переделывать через рекурсию...

Куда катится мир? Уже проверку делится ли число на 3 делают рекурсивно...
Гость
Исправил:

Program Lab12;
Uses
Crt;
Var
p:LongInt;
s:Byte;
Procedure Input;
Begin
ClrScr;
Write('p=');
ReadLn(p);
End;
Procedure Rass4et;
Begin
s:=0;
repeat
s:=s+p mod 10;
p:=p div 10;
until(p<>1);
End;
Procedure Output;
Begin
if (s mod 3)=0 then
WriteLn('Yes')
else
WriteLn('No');
End;
BEGIN
Input;
Rass4et;
Output;
ReadKey;
END.


p.s. просто по заданию надо оформить ее в виде рекурсии...а вот как рекурсию применить к данной задаче я не могу чет догнать
Гость
Что то типо такого получается:
function rass4et; 
begin
s:=s+p mod 10;
p:=p div 10
if p<> 0 then rass4et;
end;
?
Гость
Всё, решил сам, но только с использованием стринговых значений...попозже доделаю и выложу сюда
volvo
Строки здесь вообще не при чем, прекрасно делается без них:

procedure Rass4et(p: integer);
begin
if p = 0 then s := 0
else begin
rass4et(p div 10);
s := s + (p mod 10);
end;
end;

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.