Помогите оформиить данну задачу с помощью рекурсии(делится число на 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.
Неужели никто не подскажит
А что, в данном виде программа правильно решает задачу? Мне почему-то так не кажется... Кроме всего прочего - она вообще не откомпилируется. Так что сначала реши задачу правильно, а потом будешь переделывать через рекурсию...
Куда катится мир? Уже проверку делится ли число на 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.
Что то типо такого получается:
function rass4et;?
begin
s:=s+p mod 10;
p:=p div 10
if p<> 0 then rass4et;
end;
Всё, решил сам, но только с использованием стринговых значений...попозже доделаю и выложу сюда
Строки здесь вообще не при чем, прекрасно делается без них:
procedure Rass4et(p: integer);
begin
if p = 0 then s := 0
else begin
rass4et(p div 10);
s := s + (p mod 10);
end;
end;