Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Рекурсия

Автор: Guest 16.12.2007 16:10

Помогите оформиить данну задачу с помощью рекурсии(делится число на 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.

Автор: Гость 16.12.2007 18:02

Неужели никто не подскажит

Автор: volvo 16.12.2007 18:12

А что, в данном виде программа правильно решает задачу? Мне почему-то так не кажется... Кроме всего прочего - она вообще не откомпилируется. Так что сначала реши задачу правильно, а потом будешь переделывать через рекурсию...

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

Автор: Гость 16.12.2007 18:35

Исправил:


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. просто по заданию надо оформить ее в виде рекурсии...а вот как рекурсию применить к данной задаче я не могу чет догнать

Автор: Гость 16.12.2007 19:29

Что то типо такого получается:

function rass4et; 
begin
s:=s+p mod 10;
p:=p div 10
if p<> 0 then rass4et;
end;
?

Автор: Гость 16.12.2007 19:36

Всё, решил сам, но только с использованием стринговых значений...попозже доделаю и выложу сюда

Автор: volvo 16.12.2007 20:01

Строки здесь вообще не при чем, прекрасно делается без них:

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