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