Поняття підпрограми
При вирішенні складних об'ємних завдань часто доцільно розбивати їх на простіші. Метод послідовної деталізації дозволяє скласти алгоритм з дій, які, будучи простими, самі є досить самостійні алгоритми. У цьому випадку говорять про допоміжні алгоритми або підпрограми. Використання підпрограм дозволяє зробити основну програму наочнішою, зрозумілішою, а у випадку, коли одна і та ж послідовність команд зустрічається в програмі кілька разів, навіть більш короткою та ефективною.
У мові Паскаль існує два види підпрограм: процедури та функції, що визначаються програмістом.Процедурою у Паскалі називається іменована послідовність інструкцій, що реалізує деяку дію.Функція відрізняється від процедури тим, що вона має обов'язково виробити значення певного типу.
Процедури та функції, що використовуються у програмі, повинні бути відповідним чином описані до першої їх згадки.Виклик процедури абофункції здійснюється за їх ім'ям.
Підпрограми в мові Паскаль можуть матипараметри (значення, що передаються в процедуру або функцію як аргументи). При описі вказуються так звані формальні параметри (імена, під якими фігуруватимуть дані всередині підпрограми) і їх типи. При виклику підпрограми разом з її ім'ям повинні бути задані всі необхідні параметри в порядку, в якому вони знаходяться в описі. Значення, що вказуються під час виклику підпрограми, називаються фактичними параметрами.
Формат опису процедури:Procedure ( : ; : );beginend ;
Розділописів може мати такі ж підрозділи, як і розділ описів основної програми (опис процедур та функцій - у тому числі). Проте всі описані тут об'єкти "видимі" лише у цій процедурі. Вони локальні так само, як і імена формальних параметрів. Об'єкти, описані раніше в розділі описів основної програми та не перевизначені в процедурі, називаються глобальними для цієї підпрограми та доступні для використання.
Легко помітити схожість структури програми цілком і з її процедур. Справді, адже й процедура та основна програма реалізують якийсь алгоритм, просто процедура не дає вирішення всього завдання. Відмінність у заголовку та у знаку післяend.
Формат опису функції:Function ( : ; : ) : ;beginend ;
У тілі функції обов'язково має бути хоча б команда присвоєння такого виду: :=;
Зазначене вираз має призводити до значення того самого типу, що і тип результату функції, описаний вище.
Виклик процедури представляє у програмі самостійну інструкцію: ( , );
Типи фактичних параметрів мають бути такими ж, що й у відповідних формальних.
Виклик функції повинен входити до виразу. При обчисленні значення такого виразу функція буде викликана, дії, що знаходяться в її тілі, будуть виконані, вираз буде підставлено значення результату функції.
Існує два способи передачі фактичних параметрів в підпрограму: за значенням і за посиланням. У першому випадку значення змінної - фактичного параметра під час виклику підпрограми присвоюється локальної змінної, що є формальним параметром підпрограми. Що б потім не відбувалося з локальною змінною, це ніяк не позначиться на відповіднійглобальної. Для одних завдань це благо, але іноді потрібно зробити в підпрограмі дії над самими змінними, вказаними як фактичні параметри. На допомогу приходить другий спосіб. Відбувається таке: при зверненні до підпрограми немає формування локальної змінної - формального параметра. Просто на час виконання підпрограми ім'я цієї локальної змінної вказуватиме на ту саму область пам'яті, що і ім'я відповідної глобальної змінної. Якщо в цьому випадку змінити локальну змінну, зміняться дані і в глобальній.
Передача параметрів посилання відрізняється тим, що при описі підпрограми перед ім'ям змінної - формального параметра ставиться службове словоVar. Тепер використання як фактичних параметрів виразів чи безпосередніх значень вже не допускається – вони мають бути іменами змінних.
Рекурсія. Основні поняття. Пряма та непряма рекурсія.