Теоретичні відомості
Технологія програмування з використанням
процедур та функцій, організованих користувачем, дає ряд переваг:
З'являється можливість організувати роботу
кількох програмістів над однією програмою з наступним об'єднанням окремо
відлагоджених блоків в єдине ціле.
Можна проводити відлагодження окремих блоків
і лише після цього програми в цілому.
Значно економитьcя оперативна пам’ять комп’ютера.
Функцii користувача
Pascal надає користувачу можливiсть самому реалiзувати
потрiбнi йому алгоритми в видi функцiй i звертатися до них з програми. Опис
функції складається з заголовку та тіла функції.
Формат заголовку:
FUNCTION <iм'я> (формальнi параметри): <тип
результату>;
Iм’я функцiї – унiкальний в межах блоку
iдентифiкатор. Результат обчислення функцii може мати довiльний скалярний тип,
тип String i тип "вказiвник". Тiло функцii являe собою локальний
блок, по структурi аналогiчний програмi:
FUNCTION <iм'я> (формальні парамутри) : <тип
результату>;
<роздiли
описiв>;
Begin
<роздiл
операторiв>;
End;
В роздiлi операторiв повинен знаходитися як мiнiмум один
оператор, що присвоює iдентифiкаторовi функцiї (iменi) її значення.
Звертання до функцiї здiйснюється по iменi з вказанням
списку фактичних аргументiв. Кожен
аргумент повинен відповідати формальному параметру, вказаному в заголовку функції, і мати той же тип.
Наявність параметрів в функції є необов’язковим.
Приклад:
Скласти функцiю, що реалізує пiднесення до степенi.
Перетворимо функцію Z=X^y до виду Ln(Z)=(LnX)*Y при x>0.
Function Pow(x, y: Real): Real;
Begin
if x<0
then pow:=exp(y*Ln(x))
else if x<0 then
begin
Writeln("Увага! Основа степеня
вiд"ємна");
pow:= exp(y*Ln(asb(x)))
end
else if y=0
then pow:=1
else pow:=0
End;
Виклик функції: Z=pow(2, 1/3);
Параметри
Параметри процедур та функцій можуть мати довільний тип,
включаючи структурований. Pascal використовує два різних види параметрів в
процедурах і функціях: параметри-значення та параметри-змінні.
Коли параметри передаються як значення, він
використовується в виді змінної, локальної в блоці, яким є процедура або
функція. Для локальної змінної виділяється спеціальний фрагмент пам'яті, який
має стекову організацію. При передачі в процедуру або функцію фактичні параметри копіюються в відповідні їм локальні
змінні. Основною перевагою передачі параметрів-значень є те, що зміна значень
формальних параметрів в процедурах та функціях не призводить до зміри
відповідніх їм фактічних змінних в основній програмі.
При передачі параметра-змінної фактичний параметр завди
повинен бути змінною. На час виконання процедури або функції фактичний
параметр замінює формальний. Замість
копіювання значень, в блок передаються адреси комірок памяті, де розміщуються
фактичні параметри (змінні). Надалі
будь-яка дія над формальним параметром-змінною в дійсності
виконується над відповідним фактичним параметром. Параметри-змінні
використовуються при передачі в підпрограми великих масивів інформації, що
дозволяє уникати обтяжливого копіювання, а також в тих випадках, коли необхідно
передати результат з підпрограми в основну програму.
Тип в секції формальних параметрів повинен бути або
стандартним, або попередньо означеним.
Приклад:
Запис Procedure Ost(i: Array[1..12] of
Real); – помилковий.
Правильний запис: Type MAS = Array[1..12] of
Real;
Procedure Ost(i: MAS);
Ознакою того, що параметр передається як змінна, є
наявність службового слова VAR перед ідентифікатором.
Приклад:
Type MAS = array[1..12] of real;
Procedure Ost(Var i: MAS);
Область
дії ідентифікаторів
Pascal - програма має модульну структуру і може складатися з ряду вкладених
блоків. Основна програма – самий великий блок, що не входить в інші. Об'єкти описані в цьому блоці є глобальними і
можуть використовуватися в усіх локальних блоках. Локальні блоки – це процедури
і функції користувача. Описані в них
об'єкти є локальними і недоступні в зовнішніх блоках.
Правила користування ідентифікаторами Pascal-програми:
Кожний
ідентифікатор повинен описуватися перед використанням.
Областю дії ідентифікатора є блок, в якому він описаний.
Всі ідентифікатори в блоці повинні бути унікальними,
тобто не повторюватися.
Один і той же ідентифікатор може по різному бути
визначеним в кожному окремому блоку.
Якщо ідентифікатор підпрограми користувача співпадає з
іменем стандартної процедури або
функції, то вони ігноруються а
виконується підпрограма користувача.
Однією з
поширених помилок програміста є випадкове використання глобальних змінних в
процедурах і функціях, де вони змінюють своє значення. Це може призвести до
прикрих несподіванок.
|