Глобальні та локальні змінні, параметри процедур та функцій

Технологія програмування з використанням процедур та функцій, організованих користувачем, дає низку переваг. Саме завдяки ним забезпечується можливість:

- організувати роботу кількох програмістів над однією програмою з наступним об'єднанням окремо налагоджених та щодо незалежних блоків у єдине ціле;

- проводити налагодження окремих блоків і лише після цього програми загалом;

- Суттєво економити пам'ять, так як багаторазово використовуваний ділянку (процедура або функція) заноситься в пам'ять тільки один раз;

- Спростити внесення змін до програми, оскільки виправлення помилки в одному блоці не викликає коригування інших блоків.

ПАСКАЛЬ допускає п'ять основних способів використання та розміщення підпрограм:

  • основна програма, процедури та функції розташовані в одному файлі;
  • підпрограми розташовані в окремих файлах і включаються до основного файлу за допомогою директиви компілятора $;
  • підпрограми організуються як оверлейні структури і по черзі завантажуються в те саме місце пам'яті;
  • підпрограми пишуться на машинному коді та включаються до програми одним із вищевказаних способів;
  • підпрограми оформляються як "зовнішні" та викликаються з основної програми.

Коли параметри передаютьсяза значеннями,формальний параметр є змінною, локальною в блоці. Фактичний параметр може бути будь-яким виразом того ж типу, що й відповідний формальний параметр. Такі параметри називаютьсяпараметрами-значениями.Їх головна відмінна риса – зміна формальних параметрів не тягне у себе зміни фактичних параметрів. Приклад типового запису параметрів-значень в описі процедур та функцій:

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 ,>=, =, <>), при цьомупорівнюються коди символів.

Стандартні функції для роботи із символами: