Помощь - Поиск - Пользователи - Календарь
Полная версия: Рекурсия
Форум «Всё о Паскале» > 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;

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