Процедури користувача можуть бути:
· без аргументів і без результатів;
· з аргументами і без результатів;
· без аргументів і з результатами;
· з аргументами і з результатами.
Запам’ятайте!
Аргументи процедури – це змінні, які отримують свої значення в команді виклику процедури перед початком виконання команд процедури.
Результати процедури – це змінні, які передають свої значення з процедури певним змінним в команді виклику процедури.
Найчастіше використовують процедури останнього типу. Загальний вигляд цих процедур у Delphiтакий:
procedure <ім’я> (<списки аргументів з їхніми типами>; var <списки результатів з їхніми типами>);
var (<списки локальних змінних процедури з їхніми типами>);
Begin
<команди>
end;
Загальний вигляд команди виклику процедури з аргументами і результатами такий:
<ім’я> (<списки виразів, значення яких передаються аргументам процедури>, <списки змінних, яким передають свої значення результати процедури>);
Звертаємо вашу увагу: у команді виклику процедури порядок виразів, значення яких передаються аргументам процедури, і змінних, яким передають свої значення результати процедури, повинен строго відповідати порядку запису аргументів і результатів процедури в рядку її заголовка.
Оформимо як процедуру фрагмент програми, який обчислює НСД двох натуральних чисел. У цієї процедури два аргументи – два натуральні числа, НСД яких потрібно знайти, і один результат – їхній НСД. Виглядатиме ця процедура так:
procedure МCD (a, b: Integer; var c: Integer);
var r: Integer;
Begin
r := a mod b;
while r <> 0 do
Begin
a := b;
b := r;
r := a mod b;
end;
c := b;
end;
Викликати на виконання цю процедуру для одержання значення НСД двох конкретних натуральних чисел можна, наприклад, такою командою: МCD (35, 77, х). Виконуватися ця команда буде так:
1. Змінні a і b (аргументи процедури) одержують значення 35 і 77 відповідно.
2. Виконуються команди процедури.
3. Змінна с (результат процедури) передає своє значення змінній х, вказаній у команді виклику процедури.
Отже, в результаті виконання вказаної команди виклику процедури змінна х одержить значення 7.
У команді виклику цієї процедури в дужках на перших двох місцях, що відповідають аргументам процедури, можуть стояти не тільки константи, а й змінні, які на момент виконання команди виклику мають певні натуральні значення. Тобто при виконанні команди МCD (к, р, х) аргументи процедури a і b одержать значення змінних кірвідповідно. На цих місцях можуть стояти також арифметичні вирази, значення яких будуть обчислені на початку виконання команди виклику процедури і ці значення будуть передані аргументам процедури, наприклад, МCD (2*к+3, 3*р-1, х).
Звертаємо вашу увагу:
1. Аргументи та результати процедури можуть бути одними й тими самими змінними, тобто допустима процедура із заголовком Procedure One (var a, b:Integer). У такої процедури змінні aіb є одночасно і аргументами і результатами. Команда виклику цієї процедури виглядатиме так: One (x, y).
2. Процедура може серед своїх команд мати команду виклику іншої процедури.
Запам’ятайте!
Змінні, які вказані в заголовку процедури, називаються формальними параметрами процедури.
Змінні, які вказуються в команді виклику процедури, називаються фактичними параметрами процедури.
Проілюструємо зручність використання процедур користувача (зокрема, процедури знаходження НСД двох натуральних чисел) на прикладі такої задачі.
Рис. 2.59. Програма додавання двох звичайних дробів з використанням процедури НСД
| |
Задача 1. Знайти суму двох звичайних дробів.

У наведеному тексті проекту (рис. 2.59) процедура викликається двічі. Перший раз для знаходження НСД знаменників дробів. Цей НСД у наступній команді використовується для знаходження найменшого спільного знаменника дробів (НСК (х, у) = х*у/НСД(х, у)). Другий – для знаходження НСД чисельника і знаменника дробу-суми з метою його подальшого скорочення. Без використання процедури текст цього проекту збільшився б, погіршилась би його структурованість.