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

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

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

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

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

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

Рекурсія

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

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

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

program stepint;

usescrt;

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. Це останнє значення передається в основну частину програми для виведення на екран комп’ютера.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: