Підпрограми. Процедури і функції. Локальні і глобальні змінні. Області дії імен
Підпрограма - це послідовність операторів, які визначені і записані тільки|лише| в одному місці|місце-милі| програми, проте|однак| їх можна викликати|спричиняти| для виконання з|із| однієї або декількох точок програми. Кожна підпрограма визначається унікальним ім'ям.
Алгоритм рішення задачі проектується шляхом декомпозиції всього завдання|задачі| в окремі підзадачі. Зазвичай|звично| підзадачі реалізуються у вигляді підпрограм.
У Turbo| Pascal| розрізняють два види підпрограм - це процедури і функції. Процедура і функція - це іменована послідовність описів і операторів. При використанні процедур або функцій Pascal| - програма повинна містити|утримувати| текст процедури або функції і звернення до процедури або функції. Тексти процедур і функцій поміщаються в розділ описів процедур і функцій.
Процедура - це незалежна іменована частина|частка| програми, яку можна викликати|спричиняти| по імені для виконання визначеної в ній послідовності дій. Процедури служать для завдання|задавання| сукупності дій, направлених|спрямованих| на зміну зовнішньої по відношенню до них програмної обстановки.
Функція відрізняється від процедури тим, що повертає результат вказаного при її описі типу|типа|. Виклик функції може здійснюватися з|із| виразу|вираження|, де ім'я функції використовується як операнд. Функції є|з'являються,являються| окремим випадком процедур, і обов'язково повертають в точку виклику результат як значення імені цієї функції. При використанні функцій необхідно враховувати сумісність типів у виразах.
Опис процедури проводиться|виробляє,справляє| в розділі описів основної програми. Будь-яка процедура оформляється аналогічно програмі, може містити|утримувати| заголовок, розділи описів і операторів. Синтаксис заголовка процедури:
Procedure| <Name|>(<Список формальних параметрів>);
... {Розділ описів}
Begin|
…{ Розділ операторів процедури}
End|;
де Procedure| - службове слово; Name| - довільний ідентифікатор, що визначає ім'я процедури.
Procedure| MyProc| (A,B,C|: Real|; var| X1,X2|: Real|);
Begin|
WriteLn|('A=',A| ' B=|', B, 'C=|', C);
X1:=A+B|;
X2:=A*B-C|
End|;
Для виклику процедури на виконання до неї необхідно звернутися|обертатиметься|.
Виклик процедури проводиться|виробляє,справляє| вказівкою імені процедури і списком фактичних параметрів:
Name|(<Список фактичних параметрів>);
MyProc|(K, L+M|, 12, Y1|, Y2|);
Виконання оператора виклику процедури полягає в тому, що всі формальні параметри замінюються відповідними фактичними. Після|потім| цього створюється динамічний екземпляр|примірник| процедури, який і виконується. Після|потім| виконання процедури відбувається|походить| передача управління в основну програму, тобто починає|розпочинає,зачинає| виконуватися оператор, наступний|слідуючий| за оператором виклику процедури.
Оформляється функція аналогічно процедурі. Відмітною особливістю функції є|з'являється,являється| те, що вона повертає тільки|лише| один результат виконання. Цей результат позначається|значить| ім'ям функції і повертається (передається) в основну програму (місце|місце-миля| виклику). Функція складається із заголовка, розділу описів і розділу операторів.
Function| <Name|>(<Список формальних параметрів>):<Type>;
... {Розділ описів}
Begin|
…{ Розділ операторів процедури}
Name:=<вираз| відповідного типу|типа|>;
.
End|;
де Function| - службове слово; Name| - довільний ідентифікатор, що визначає ім'я функції. У відмінності|відзнаці| від процедур в розділі операторів тіла функції обов'язково повинен бути хоч би|хоча би| один оператор привласнення|присвоєння| імені функції виразу|вираження| або значення відповідного типу|типа|. Після|потім| роботи функції результат привласнюється імені функції.
Таким чином, алгоритм можна оформити у вигляді функції в тому випадку, якщо|у тому випадку , якщо,в том случае | як результат виходить одне єдине значення. Для виклику функції досить вказати її ім'я (з|із| фактичними параметрами) в будь-якому виразі|вираженні|, де тип результату функції буде прийнятний. Ім'я функції можна використовувати в арифметичних виразах і інших командах.
Використання процедур і функцій в Паскалі тісно пов'язане з деякими особливостями роботи з|із| ідентифікаторами (іменами) в програмі. Зокрема|, не всі імена завжди доступні для використання. Доступ до ідентифікатора в конкретний момент часу визначається тим, в якому блоці він описаний.
Імена, описані в заголовку або розділі описів процедури або функції називають локальними для цього блоку. Імена, описані в блоці, відповідному всій програмі, називають глобальними. Слід пам'ятати, що формальні параметри процедур| і функцій завжди є|з'являються,являються| локальними змінними для відповідних блоків.
Якщо змінна або константа описана в основній програмі, вона вважається|лічить| глобальною, і її можуть використовувати будь-які процедури і функції даної програми. Змінні, описані усередині|всередині| підпрограми, називаються локальними і можуть бути використані тільки|лише| усередині|всередині| даної підпрограми. Локальні змінні можуть бути описані як в заголовку підпрограми, так і в розділі опису змінних. При збігу імен глобальних і локальних змінних, локальні визначення в межах своєї дії відміняють|скасовують| дії глобальних, і ці змінні ніяк не зв'язані між собою.