Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция студ 8 (2007).doc
Скачиваний:
0
Добавлен:
28.10.2018
Размер:
94.21 Кб
Скачать

Передача параметрів в Turbo Pascal

В Turbo Pascal реалізовано способи передачі параметрів:

  1. Параметри - значення. При описі заголовків процедур/функцій перед ідентифікаторами параметрів-значень додаткові ключові слова не ставляться.

  2. Параметри-змінні. При описі заголовків процедур/функцій перед ідентифікаторами параметр-змінних ставиться ключове слово var.

  3. Параметри-константи. При описі заголовків процедур/функцій перед ідентифікаторами параметрів-констант ставиться ключове слово const.

Перших два різновиди параметрів (параметри-значення й параметри-змінні) є стандартними для всіх реалізацій і версій мови Pascal. Третій різновид (параметри-константи) є нововведенням мови Turbo Pascal версії 7.0.

Рекурсія

Існують програми, в яких може бути процедура, що містить звернення до інших процедур. Звернення до інших функцій і процедур (як стандартним, так і створеним програмістом) можуть містити і функції. При цьому можливий і такий варіант, коли яка-небудь функція або процедура містить звернення до самої себе. Така функція або процедура називається рекурентною (від англійського слова «recurrence», що в перекладі означає повернення або повторення), а процес виклику функції або процедури з неї самої – рекурсією.

Процес рекурсії відбувається таким чином: на початку відбувається виклик деякої функції (процедури). Потім, ще до завершення своєї роботи, ця ж функція (процедура) викликає саму себе, і в результаті в пам’яті комп’ютера з’являється другий екземпляр тієї ж функції(процедури), другий екземпляр в ході роботи створює третій, і так далі. Природно, що такий процес може продовжуватися до нескінченності, тому для вирішення якого-небудь конкретного завдання в рекурсивній функції (процедурі) обов’язково повинен міститися умовний оператор, одна з гілок якого забезпечує переривання цього нескінченного ланцюжка і завершення роботи всіх екземплярів функції (процедури). Всередині цього оператора і повинен знаходитися виклик функції.

Як нескладний приклад, що наочно ілюструє процес рекурсії, розглянемо завдання обчислення цілого додатного степеня дійсного числа ().

program stepint;

uses crt;

var x, st:real; y:integer;

function rek (a:real; k:integer):real;

begin

if k=1 then rek:=a

else rek:=rek(a, k-1)*a;

end;

begin

clrscr;

writeln ('Vvedite chislo'); readln(x);

writeln ('Vvedite pokazatel stepeni'); readln(y);

st:=rek(x,y);

writeln ('Stepen chisla ravna ', st:1:3);

readln;

end.

У даній програмі в основній її частині проводиться тільки введення початкових даних (самого числа х і показника степеня у), виклик рекурсивної функції rek і виведення отриманого результату, а саме обчислення степеня проводиться у функції rek. Розберемо детальніше механізм дії даної функції.

Для цього потрібно відповісти на питання: чому дорівнює будь-яке число в першому степені. Відповідь очевидна – самому цьому числу. Це ми і запишемо на початку умовного оператора: для k=1 результат rek рівний початковому числу а. Для знаходження ж квадрата числа потрібне це число помножити саме на себе, для знаходження куба – квадрат числа помножити на це число і так далі. Таким чином, існує наступна закономірність: k степінь числа рівний цьому числу в степені k–1, помноженому на саме число:

Цю формулу запишемо в тій гілці умовного оператора, яка знаходиться після службового слова else.

Тепер розглянемо безпосередньо роботу функції. Дана функція має два формальні параметри а і k, яким відповідають в основній частині програми фактичні параметри х і у. Значенням функції є . Для обчислення значення функції rek з параметрами k і а викликається інший екземпляр тієї ж функції з параметрами k-1 і а (а залишається незмінним для всіх екземплярів функції), потім цей екземпляр викликає наступний з параметром k–2 і так далі, поки процес не доходить до звернення до екземпляра для k=1.

Значення функції для k=1 вже відоме, оскільки в цьому випадку воно рівне а. Це значення передається в екземпляр для k=2 і так далі, поки не визначається значення для k. Це останнє значення передається в основну частину програми для виведення на екран комп’ютера.

1