Підпрограми – процедури та функції
В мові Паскаль використовується два види підпрограм - процедури та функції. Вони відрізняються між собою структурою та способом виклику.
При проектуванні програми визначається, які частини алгоритму треба реалізувати як процедури, а де знадобиться функція. В головній частині програми підпрограми розташовуються після розділу опису даних перед оператором 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.