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

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

1

"I

л

Л'

1

1"

ри и ™ 0;

, при п> 0;

при п •

Рекурсивная функция:

Function Power(a: real; n: integer): real;

Begin

If n = 0 Then Power :- 1 Else

If n > 0 Then Power := a * Power (a, n - 1)

Else Power := l/(Power(a, Abs(n)))

End;

Примечание. Целесообразно обсудить с учащимися последовательность вызовов и использования приведенной функции при отрицательных значениях tu например, и ■■ —э-

11. Разработать программу для нахождения наиболь­шего общего делителя (НОД) двух заданных натураль­ных чисел.

Решение

Можно применить алгоритм Евклида нахожде­ния НОД. Его суть в следующем: "Если два заданных числа равны, то в качестве ответа взять любое, ина­че большее из чисел заменить разностью большего и меньшего".

В аналитическом виде алгоритм Евклида выглядит следующим образом:

W , При П 171

N0D(m,n) = lN0D(m-n,n), при т> п [N0D(m,n-m), при п> т.

Рекурсивная функция, реализующая этот алгоритм:

Function N0D(a, b: word): word;

Begin

If a = b Then NOD := a

Else

If a > b Then NOD := N0D(a - b, b)

Else NOD := NOD (a, b - a) End;

12. Разработать программу для определения значе­ния минимального элемента массива.

Решение

Опишем функцию MinK, которая определяет мини­мум в массиве а из к элементов. Ясно, что если к = 2, то результат равен минимальному из первых двух эле­ментов массива. Если же к > 2, то результатом является минимальное из двух чисел: последнего элемента такого массива и минимального числа из первых - 1) эле­ментов массива. Второе из сравниваемых чисел можно найти с помощью той же функции MinK (рекурсивный вызов).

CivMioVmi тпухчцая рекурсивная функция

Tunction MinKlk: byte) : integer;

Begin

If к - 2 Then MinK :- MinlalU, a|k)) Zlee MinK :« Min(a[k), MinK(lc - i)>

End;

Минимальное из двух чисел определяется с помо­щью функции Min, параметрами которой являются эти

числа:

Function Min(a, b: integer): integer; Begin

If a > b Then Min :=■ b

Else Min : = a End;

Чтобы найти минимум среди всех элементов задан­ного массива, нужно вызвать функцию MinK указав в качестве фактического параметра размер массива.

Or редакции. Можно в заголовке функции использовать только один параметр — к, а в ее теле значение last заменить на

Function MinK(k: byte): integer;

Begin

If k = 2 Then MinK := Min(a[l], a[2]) Klse MinK := Min(a[k], MinK(k - 1))

End;

13. Разработать программу для определения индекса минимального элемента массива.

Решение

Если в массиве два элемента {к = 2), то результатом является индекс одного из двух первых элементов. Если же п > 2, то результат определяется путем сравнения двух элементов: к-го и того, который является мини­мальным среди первых — 1) элементов массива. Ин­декс второго из сравниваемых чисел можно найти, ис­пользуя рекурсию.

Соответствующая рекурсивная функция: щ

Function IndMinK(k: byte): byte;

Begin

If k = 2 Then IndMinK := IndMin2(l, k) Else IndMinK := IndMin2(k, IndMinK(k - D)

End;

— где IndMin2 — функция определения индекса ми­нимального из двух элементов массива с заданными

индексами:

Function IndMin2(indl, ind2: byte): byte;

(indl, ind2 - индексы сравниваемых элементов)

Begin

If a[indl]< a[ind2] Then IndMin2 := indl Else IndMin2 := ind2

End;

Примечание. Целесообразно предложить учащимся подумать над вопросом: "Индекс какого элемента будет найден, если в массиве есть несколько элементов с минимальным значением?".

  1. Используя оператор write (а) лишь при'й = 0..9, разработать программу вывода на экран десятичной за­писи заданного натурального числа п.

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