Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
рпр.doc
Скачиваний:
3
Добавлен:
22.11.2018
Размер:
328.19 Кб
Скачать

2008 N» 5 информатика

21

Решение

I]ро1|сдура, обеспечивающая рс-шемш' задачи:

Procedure Printfn: longint);

Begin

If л < 10 Then

Begin л :-T n; write(a)

End

Else

Begin

(РеКурСИВНЫЙ ВЫЗОВ Пропекут i W..,.|

Print(n div 10); (Определение и вывел последней цифры числа ri) л :- n mod 10; write(a) End End;

Здесь также имеет место так называемая "Форма ре­курсивной процедуры с выполнением действий после рекурсивного вызова (или с выполнением действий на рекурсивном возврате)" — см. раздел 5. — Прим. ред.

15. Разработать программу, которая вычисляет дли­ну заданной строки (стандартную функцию Length не использовать).

Решение

В рекурсивной функции применяется стандартная процедура Delete:

Function Lents: string): byte; Begin

If S = " Then Len := 0

Else

Begin

Deietels, 1, 1); Len := 1 + Len(s) End End;

16. Разработать программу, проверяющую, является ли некоторая строка палиндромом (т.е. читается одина­ково слева направо и справа налево).

Решение

Рекурсивная функция, возвращающая результат ло­гического типа, с помощью которой можно решить за­дачу, имеет вид:

Function PaKs: string): boolean; Begin

{Если строка 'пустая' или состоит из одного символа} If (s » ") Or (Length(s) - 1) Than Pal :=■ true Else

(Сравниваем первый и последний символы строки)

If s[l] о s(Length(s)] Then Pal : = false Else

{Удаляем первый и последний символы строки) Begin

Deiete(n, I, l); Deletets, LengtM.'j), 1); |и вновь проверяли ост.и.щу«х:я строку! Pal :- Pal(a) End End;

'-Эта функция ииюлмуетия к основной части про-qxiMMbl при выводе ответа:

If l'rtl(ot)

Then writelnCCxpoKa является палиндромом'( Elee wtitelnCCrpoKa не является палиндромом');

— где it — проверяемая строка.

Можно также процедуру Delete не применять, а при рекуртивмом вы:юве исполь:ювать функцию Сору.

17.1'а^работать программу расчета суммы двух нату­ральных чисел, используя только прибавление единицы.

Решение

Рекурсивная функция Summal, возвращаклцая число a как результат сложения а единиц, может быть оформ­лена и виде:

Function r;ummal(a: byte): word;

Begin

If ;j i Than Summal :- 1

Else Summal :■ 1 + Summal (a — 1)

End;

1)та функция используется в основной части про­граммы для подсчета искомого результата rez: rez := SummaKnl) + Summal(n2);

— где п\ и «2 — складываемые числа.

18. Разработать программу расчета произведения двух натуральных чисел, используя только операцию сложения.

Решение

Рекурсивная функция, возвращающая произведение двух своих параметров а1и<?2как результат многократ­ного сложения, имеет вид:

Function Multlal, a2 : byte): longint;

Begin

If a2 - 1 Then Mult :» al

Else Mult :=• al + Multlal, a2 - 1)

End;

Возможен также "симметричный" вариант, в кото­ром происходит al сложений числа д2, а также "общий вариант, в котором после сравнения al и al выбирается оптимальный с точки зрения количества операций сло­жения.

19. Разработать программу для вывода заданной пос­ледовательности чисел, оканчивающейся нулем, в об­ратном порядке.

Решение

В соответствующей рекурсивной процедуре исполь­зуется локальная переменная п — очередное число пос­ледовательности:

Procedure Output;

Var n: integer;

22

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]