В мові Паскаль використовується два види підпрограм - процедури та функції.
Вони відрізняються між собою структурою та способом виклику.
При проектуванні програми визначається, які частини алгоритму
треба реалізувати як процедури, а де знадобиться функція. В головній
частині програми підпрограми розташовуються після розділу опису даних перед
оператором Begin, а викликаються при потребі в процесі виконання головної
програми або іншої підпрограми.
Структура процедури має вигляд:
Procedure ім’я (список
формальних параметрів);
Розділ локальних даних
Begin
... {розділ виконавчих операторів}
End;
Перший рядок складає заголовок процедури, ім’я процедури вибирає програміст
так як і ім'я змінної. В списку формальних параметрів описуються через ;
параметри та інформація про їх тип. Деякі параметри призначені для
передачі даних в процедуру, інші для повернення результатів з процедури до тієї
програмної одиниці, яка її викликала.
В розділі локальних даних (який взагалі може бути відсутнім) описують ті
дані, які використовуються тільки для «службових» цілей в самій процедурі
(параметри циклів, робочі змінні та масиви, тощо).
Всередині підпрограми записують послідовність операторів, які
реалізують потрібний алгоритм. При цьому вони працюють з формальними
параметрами, локальними та глобальними даними.
Зв'язок між окремими частинами програми здійснюється через списки формальних параметрів
та за допомогою глобальних змінних.
Глобальні дані описуються в головній програмі вони не являються фактичними
параметрами при виклику підпрограм, не описані в підпрограмах, а використовуються
в одній з них і в головній програмі.
Результати роботи підпрограми можуть бути передані до головної програми
через формальні параметри та глобальні дані.
Приклад. Програма обчислення суми десяткових
цифр.
Програма:
Const N=5;
Var X:Array [1..N] of Integer;
SumX, Kill,I : Integer;
Procedure Sum(A:Integer; Var ISum:Integer);
Begin
ISum:=0;
While A<>0 do
Begin
Kill:=Kill+1;
ISum:=ISum+Abs(A) mod 10;
A:=A div 10;
End;
End;
Begin
Writeln(‘Введіть масив’);
For I:=1 to N do Read(X[i]);
Kill:=0;
For I:=1 to N do
Begin
Sum(X[I], SumX);
Writeln(X[I]:6, SumX:4);
End;
Writeln(‘Загальна кількість цифр’, Kill);
End.
Підпрограми-функції використовуються для реалізації алгоритму та
повернення в головну програму одного результату в вигляді імені функції.
Ім'я функції вибирається довільно (як ім'я змінної).
Структура функції:
Function ім'я(список формальних
параметрів): тип імені;
{локальні дані}
Begin
...
ім'я := ...;
...
End;
Типом функції може бути скалярний тип, тобто: цілий, дійсний, логічний,
символьний та рядковий тип String.
Відносно формальних параметрів, локальних та глобальних даних в функції
діють такі ж самі обмеження та вимоги, що і в процедурах.
В виконавчій частині підпрограми-функції повинен бути хоча б один оператор в
якому імені функції: призначається значення.
Звернення до функції виконується з якого-небудь арифметичного виразу так,
як і до стандартних функцій тину sin(x), ln(x), тощо.
Результат роботи функції передається в місце її виклику.
Приклад. Використання функції для обчислення степені.
Програма:
Var x,y,z : Real ;
Function
Step(a:real; b:real):real;
Begin
If a<=0 then
Begin
Writeln( 'перевірте дані');
Halt(0);
End;
If b=0 then Step:=1
else Step:=exp(b*ln(a));
End;
Begin
Readln(x:y);
Z:=Step(x,y)+Step(y,x);
Writeln(x,y,z);
End.