Глобальні та локальні змінні, параметри процедур та функцій
Технологія програмування з використанням процедур та функцій, організованих користувачем, дає низку переваг. Саме завдяки ним забезпечується можливість:
- організувати роботу кількох програмістів над однією програмою з наступним об'єднанням окремо налагоджених та щодо незалежних блоків у єдине ціле;
- проводити налагодження окремих блоків і лише після цього програми загалом;
- Суттєво економити пам'ять, так як багаторазово використовуваний ділянку (процедура або функція) заноситься в пам'ять тільки один раз;
- Спростити внесення змін до програми, оскільки виправлення помилки в одному блоці не викликає коригування інших блоків.
ПАСКАЛЬ допускає п'ять основних способів використання та розміщення підпрограм:
- основна програма, процедури та функції розташовані в одному файлі;
- підпрограми розташовані в окремих файлах і включаються до основного файлу за допомогою директиви компілятора $;
- підпрограми організуються як оверлейні структури і по черзі завантажуються в те саме місце пам'яті;
- підпрограми пишуться на машинному коді та включаються до програми одним із вищевказаних способів;
- підпрограми оформляються як "зовнішні" та викликаються з основної програми.
Коли параметри передаютьсяза значеннями,формальний параметр є змінною, локальною в блоці. Фактичний параметр може бути будь-яким виразом того ж типу, що й відповідний формальний параметр. Такі параметри називаютьсяпараметрами-значениями.Їх головна відмінна риса – зміна формальних параметрів не тягне у себе зміни фактичних параметрів. Приклад типового запису параметрів-значень в описі процедур та функцій:
Procedure Копі (А, В, С:integer; D: real);
Function Docs (S1, S2: real; Flag: boolean): real;
Тип параметрів у секції формальних параметрів має бути зазначений у вигляді визначеного раніше ідентифікатора типу. Так, запис
Procedure Okl (Mas1: array [1. .12] of real); є помилковою. Тип змінної слід визначити раніше у розділі опису типів блоку:
Type Massiv = array [1. .12] of real;
Procedure Okl (Mas1: Massiv);
Коли параметр передається за допомогоюпосилання,фактичний параметр є змінною. Формальний параметр означає цю фактичну змінну протягом всього часу активізації блоку. Параметри, передані за допомогою посилання, називаютьсяпараметрами-змінними.Їх характерна ознака – будь-яка зміна формального параметра означає зміну фактичного параметра. Для опису параметрів-змінних у секції формальних параметрів служить зарезервоване слово Var.
При використанні параметрів-змінних формальні та фактичні параметри повинні збігатися за кількістю та типом. Однак можливі два винятки:
Формальні параметри без типу несумісні з жодним типом. Допустимо поєднання параметрів-значень та параметрів-змінних в одній секції формальних параметрів:
Procedure Prots (Var А, В, С: real; S: boolean);
Такий запис означає, що А, В, С – параметри-змінні, а S – параметр-значення. Нагадаємо, що якщо процедура має повернути в програму певні результати, вони мають бути специфіковані як параметри-змінні, тобто у поєднанні зі словом Var, інакше результати не будуть повернені.
Процедури користувача
Процедура користувача є іменованою групою операторів, що реалізує певну частинузагальної задачі та викликану при необхідності для виконання на ім'я з будь-якої позиції розділу операторів. Опис процедури включає заголовок та тіло процедури. Заголовок складається з зарезервованого слова Procedure, ідентифікатора (імені) процедури та необов'язкового укладеного у круглі дужки списку формальних параметрів із зазначенням типу кожного параметра.
Procedure [( формальні параметри )];
Procedure Sort (A: integer; У: real);
Procedure Kvadr (Alpha, Beta: integer; var Gamma: boolean);
Ім'я процедури – ідентифікатор, унікальний у межах програми. Тіло процедури є локальний блок, за структурою аналогічний програмі:
Procedure [(формальні параметри)];
Для звернення до процедури використовується оператордзвінка процедури. Він складається з ідентифікатора (імені) процедури та списку фактичних параметрів, відокремлених один від одного комами і укладених у круглі дужки. Список параметрів може бути відсутнім, якщо процедурі не передається жодних значень.
Kvadr (14,25, True);
Параметри забезпечують механізм заміни, що дозволяє виконувати процедуру з різними початковими даними. Між фактичними параметрами оператора виклику процедури і формальними параметрами в заголовку опису процедури встановлюється взаємно-однозначне відповідність у результаті їх перебору зліва направо. Кількість і тип формальних параметрів дорівнюють кількості та типу фактичних параметрів. Нижче наведена програма, що реалізує за допомогою процедури без параметрів очищення екрана, встановлення курсору в його центр та виведення слова 'ДОВІДНИК'.
Якщо процедура повертає до програми якісь значення, відповідні змінні мають бути описані як параметри-змінні з використанням словаVar.
Функції користувача
Хоча набір вбудованих функцій мови Паскаль досить широкий, він навряд чи може задовольнити вимоги кожного програміста. Тому користувачеві надано можливість самому реалізувати потрібні йому алгоритми у вигляді функцій і звертатися до них із програм у міру необхідності.
Функція, визначена користувачем, складається із заголовка та тіла функції. Заголовок містить зарезервоване слово Function, ідентифікатор (ім'я) функції, укладений у круглі дужки, необов'язковий список формальних параметрів та тип значення, що повертається функцією.
Function :
Function Prov (X, Y, T: integer): real;
Function Zx: boolean;
Ім'я функції – унікальний у межах блоку ідентифікатор. Результат, що повертається, може мати будь-який скалярний тип, тип string і тип "покажчик".
Тіло функції є локальний блок, за структурою аналогічний програмі:
У розділі операторів повинен перебувати принаймні один оператор, який надає ідентифікатору функції значення. Якщо таких присвоювань кілька, результатом виконання функції буде значення останнього оператора присвоювання.
Звернення до функції здійснюється на ім'я з необов'язковим зазначенням списку аргументів. Кожен аргумент повинен відповідати формальним параметрам, зазначеним у заголовку, і мати той самий тип.
Для ілюстрації використання функцій розглянемо підпрограму, яка зводить у ступінь позитивне чи негативне число.
Z: integer; До: real;
Function Step (F: real; Exp: integer): real;
З: integer; T: real;
if Exp = 0 then Step := 1 else
for З : = 2 до Abs (Exp) do T : - T * F;
if Exp ,>=, =, <>), при цьомупорівнюються коди символів.
Стандартні функції для роботи із символами: