Процедури та функції

Процедури та функції

При вирішенні складних об'ємних завдань часто доцільно розбивати їх на простіші. Метод послідовної деталізації дозволяє скласти алгоритм з дій, які, будучи простими, самі є досить самостійні алгоритми. У цьому випадку говорять про допоміжні алгоритми або підпрограми. Використання підпрограм дозволяє зробити основну програму наочнішою, зрозумілішою, а у випадку, коли одна і та ж послідовність команд зустрічається в програмі кілька разів, навіть більш короткою та ефективною.

У мові Паскаль існує два види підпрограм: процедури та функції, що визначаються програмістом. Процедурою в Паскалі називається іменована послідовність інструкцій, що реалізує певну дію. Функція відрізняється від процедури тим, що повинна обов'язково виробити значення певного типу.

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

Підпрограми у мові Паскаль можуть мати параметри (значення, що передаються в процедуру або функцію як аргументи). При описі вказуються так звані формальні параметри (імена, під якими фігуруватимуть дані всередині підпрограми) і їх типи. При виклику підпрограми разом з її ім'ям повинні бути задані всі необхідні параметри в порядку, в якому вони знаходяться в описі. Значення, що вказуються під час виклику підпрограми, називаються фактичними параметрами.

Розділ описів може мати такі ж підрозділи, як і розділ описів основної програми (опис процедур та функцій – у тому числі). Однак усі описані тут об'єкти "видимі" лише в ційпроцедуру. Вони тут локальні так само, як і імена формальних параметрів. Об'єкти, описані раніше в розділі описів основної програми та не перевизначені в процедурі, називаються глобальними для цієї підпрограми та доступні для використання.

Легко помітити схожість структури програми цілком і з її процедур. Справді, адже й процедура та основна програма реалізують якийсь алгоритм, просто процедура не дає вирішення всього завдання. Відмінність у заголовку та у знаку після End.

Формат опису функції: Function ( : ; : ?) : ; Begin End;

У тілі функції обов'язково має бути хоча б команда присвоєння такого виду: :=;

Зазначене вираз має призводити до значення того самого типу, що і тип результату функції, описаний вище.

Виклик процедури представляє у програмі самостійну інструкцію: (6, ?);

Типи фактичних параметрів повинні бути такими ж, що і у відповідних формальних.

Виклик функції повинен входити до виразу. При обчисленні значення такого виразу функція буде викликана, дії, що знаходяться в її тілі, будуть виконані, вираз буде підставлено значення результату функції.

Наведемо найпростіший приклад використання підпрограми.

Завдання: "Знайти максимальне із трьох введених чисел". Для вирішення скористаємося описом функції, що приймає значення максимального двох чисел, які передаються в неї у вигляді параметрів.

Зверніть увагу на стислість тіла основної програми та на прозорість дій усередині функції. Формальні параметри A та B, що використовуються у підпрограмі, не мають жодного відношення змінним A та B, описаним в основній програмі.

Існує два способи передачі фактичних параметрів у підпрограму: за значенням та зазасланні. У першому випадку значення змінно-фактичного параметра при виклику підпрограми присвоюється локальної змінної, що є формальним параметром підпрограми. Що б потім не відбувалося з локальною змінною, це ніяк не вплине на відповідну глобальну. Для одних завдань це благо, але іноді потрібно зробити в підпрограмі дії над самими змінними, вказаними як фактичні параметри. На допомогу приходить другий спосіб. Відбувається таке: при зверненні до підпрограми не відбувається формування локальної змінно-формального параметра. Просто на час виконання підпрограми ім'я цієї локальної змінної вказуватиме на ту саму область пам'яті, що і ім'я відповідної глобальної змінної. Якщо в цьому випадку змінити локальну змінну, зміняться дані і в глобальній.

Передача параметрів посилання відрізняється тим, що при описі підпрограми перед ім'ям змінної-формального параметра ставиться службове слово Var. Тепер використання як фактичних параметрів виразів чи безпосередніх значень вже не допускається – вони мають бути іменами змінних.

Ще один класичний приклад. Завдання: "Розмістити в порядку незменшення три цілих числа".