Програмування допоміжних алгоритмів
begin
…
second(k,p); {виклик процедури, тіло якої описано вище}
…
end;
2. Процедури-функції.
Функції, оголошені користувачем, також складаються із заголовка, блока оголошень та тіла функції.
Заголовок функції починається стандартним ідентифікатором function, містить ім’я для функції, формальні параметри (якщо вони присутні) і тип результату функції. Тип результату може бути будь-яким скалярним або рядковим типом. Тіло функції являє собою локальний блок операторів, аналогічний блокові для процедури. Відмінність полягає в тому, що хоча б один раз в тілі функції повинен зустрітись оператор присвоювання, який містить її ім’я в лівій частині.Функція активізується за допомогою виклику функції або обчислення. Виклик функції містить ідентифікатор функції і необхідні фактичні параметри. Функція виконується при обчисленні виразу, а значення операнду стає значенням, що повертається функцією. Результатом виконання функції буде останнє присвоєне її імені значення. Якщо такого оператора присвоювання немає або він не виконується, те що повертається функцією значення буде невизначеним.
Якщо ідентифікатор функції використовується для виклику функції усередині блоку функції, то функція виконується рекурсивно. Такі функції будуть розглянуті далі.
ПРИКЛАД: розглянемо опис функції для обчислення добутку перших k натуральних чисел (k!).
function fact(k: integer) : integer;
{ в заголовку процедури міститься параметр k – він є параметром-значенням і являє собою вихідні дані; сама функція оголошена також цілочисельною }
var
i: integer;
{ локальна змінна i буде використовуватись як параметр циклу }
p:integer; { ця змінна потрібна для обчислення
результату в циклі }
begin {тіло процедури задає дії }
p:=1;
for i:=1 to k do p:=p*i;
facf:=p; {ім’я fact не могло використовуватись в циклі, тому що це суперечить правилам виклику функції}