Підпрограмою
називається іменована, логічно закінчена група операторів мови, яку можна
викликати для виконання будь-яку кількість разів із різних місць програми. У
мові Паскаль для організації підпрограм використовуються процедури і
функції. Процедура - це незалежна поіменована
частина програми, призначена для виконання визначених дій. Вона складається з
тіла і заголовка. За структурою її можна розглядати як програму в мініатюрі.
Після однократного опису процедуру дозволяється викликати за іменем з наступних
частин програми. Використання імені процедури в програмі називається викликом
процедури. Ім'я процедури не може знаходитися у виразі у якості
операнду. Функція відрізняється від процедури
тим, що, по-перше, передає в точку виклику скалярне значення (результат своєї
роботи), а по-друге, ім'я функції може входити у вирази, як операнд. Функція,
якщо вона зустрічається у виразі, називається покажчиком функції або звертанням
до функції. Усі процедури і функції мови Паскаль підрозділяються на дві
групи: вбудовані; визначені користувачем. Вбудовані (стандартні)
процедури і функції є частиною мови і можуть викликатися за іменем без
попереднього опису в розділі описового блока. З багатьма з них ви вже
знайомилися в попередніх розділах. Процедури і функції користувача
організовуються самим програмістом відповідно до синтаксису мови і являють собою
локальні блоки. Попередній опис процедур і функцій користувача є
обов'язковим. Функція, визначена користувачем, складається з заголовка
і тіла функції. Заголовок містить зарезервоване слово Function,
ідентифікатор (ім'я) функції та, укладений у круглі дужки, необов'язковий список
формальних параметрів і тип значення, що повертається функцією. Формат опису: Function <ім'я> [(формальні
параметри)]:<тип результату>; Ім'я функції -
унікальний у межах блока ідентифікатор. Результат, що повертається, може мати
будь-який простий тип і тип string. Тіло функції являє собою локальний
блок, за структурою аналогічний програмі: Function <ім'я>
[(формальні параметри)]:<тип результату>; [<розділи
описів>;] begin <розділ операторів> end; У розділі
операторів повинен перебувати хоча б один оператор, що присвоює ідентифікатору
функції значення. Якщо таких операторів декілька, то результатом виконання
функції буде значення останнього оператора присвоювання. Звертання до функції
здійснюється за іменем з необов'язковою вказівкою списку аргументів. Кожен
аргумент повинен відповідати формальним параметрам, зазначеним у заголовку, і
мати той же тип. Формат
звертання: Y:=<ідентифікатор функції > [(фактичні
параметри)]; Функції можуть повертати значення цілих, дійсних, булівских,
літерних і рядкових типів. Опис процедури включає заголовок (ім'я) і
тіло процедури. Заголовок складається з зарезервованого слова Procedure,
ідентифікатора (імені) процедури і необов'язкового списку формальних параметрів
із вказівкою їх типу, який укладається в круглі дужки . Формат опису: Procedure <ім'я> [(формальні
параметри)]; Приклад: Procedure Korrekt; Procedure
Sort (A:byte); Ім'я процедури - ідентифікатор, унікальний у межах
програми. Тіло процедури являє собою локальний блок, за структурою аналогічний
програмі: Procedure <ім'я> [(формальні параметри)]; [<розділи
описів>;] begin <розділи операторів> end; Зверніть
увагу, що як формальні параметри, так і розділ описів у процедурі може бути
відсутній. Щоб звернутися до процедури, треба використати оператор виклику
процедури. Він складається з ідентифікатора (імені) процедури і списку фактичних
параметрів, що відділені один від одного комами і знаходяться у круглих дужках.
Якщо процедурі не передається ніяких параметрів, то фактичні параметри не
вказуються. Формат виклику
процедури: <ідентифікатор> [(фактичні
параметри)]; Параметри забезпечують механізм заміни, який дозволяє
виконувати процедуру з різними початковими даними. Між фактичними параметрами в
операторі виклику процедури і формальними параметрами у заголовку опису
процедури встановлюється взаємо-однозначна відповідність у результаті їхнього
перебору зліва направо. Фактичні параметри за кількістю і типами повинні
дорівнювати кількості і типам формальних параметрів. Параметри, за
допомогою яких здійснюється обмін значеннями змінних між підпрограмами та
програмою, що їх викликає, можуть мати будь-який тип, в тому числі
структурований. Існують два типи параметрів: параметр-значення;
параметр-змінна. Група параметрів, перед якими відсутнє зарезервоване
слово Var, називається параметрами-значеннями. Наприклад, в
описі Procedure Korrect(S,K:real) S і K - параметри-значення.
Формальний параметр-значення обробляється, як локальна стосовно процедури або
функції, змінна. Зміни формальних параметрів-значень не впливають на відповідні
значення фактичних параметрів. Група параметрів, перед якими знаходиться
ключове слово Var, називається параметрами-змінними. Наприклад, в
описі Procedure Obr(Var A,B:integer); А та В - параметри-змінні.
Параметр-змінна використовується в тому випадку, якщо значення повинно бути
передане з процедури в блок, що її викликає. При активізації процедури або
функції формальний параметр-змінна заміщується фактичною змінною, а тому
будь-які зміни в значенні формального параметра-змінної відбиваються на
фактичному параметрі. І в тому, і в іншому випадку тип фактичного параметра
повинен збігатися з типом формального. Якщо формальний параметр має рядковий
тип, йому надається атрибут довжини, рівний 255, а тому і фактичний параметр в
цьому випадку повинен також мати рядковий тип з атрибутом довжини, що дорівнює
255. У якості параметра-змінної може використовуватися будь-який тип, в тому
числі файловий. Область дії ідентифікаторів. Для правильного
визначення області дії ідентифікаторів при використанні в програмі процедур і
функцій необхідно притримуватися наступних правил:
1. Кожний ідентифікатор повинен бути описаний перед тим, як він буде
використаний. 2. Ідентифікатор діє у межах блоку, в якому він
описаний. 3. Всі ідентифікатори в одному блоці повинні бути унікальними,
тобто не повторюватися. 4. Однакові ідентифікатори можуть бути по-різному
визначені у кожному окремому блоці, але це вважається поганим стилем
програмування і тому не рекомендується в різних блоках програми
використовувати змінні з однаковими іменами.. 5. Якщо ідентифікатор
підпрограми користувача збігається з ім'ям стандартної процедури або функції,
то вони стають недоступними в межах області дії підпрограми, оголошеної
користувачем, тобто стандартна функція ігнорується, а виконується програма
користувача.
|