Змінні процедурного типу
Тема: ПРОЦЕДУРНІ ТИПИ ТА ЇХ ВИКОРИСТАННЯ
Питання, що розглядаються у лекції: 1. Визначення прцедурного типу 2. Визначення змінних процедурного типу та їх використання 3. Процедури чи функції у структурованих даних 4. процедурна змінна як параметр
Процедурні типи
Використовуються: 1. При визначенні процедурних змінних 2. При побудові струтурованих типів 3. При використанні процедур чи функцій як параметрів для інших процедур чи функцій
Опис: TYPE <ідентифікатор> = procedure [(< формальні параметри >)]; TYPE <ідентифікатор> = function [(< формальні параметри >)]:<тип результату>;
Приклад:
type proc=procedure(x,y:real;var i:integer); {тип процедура з двома параметрами-значеннями та одним параметром-змінною} fun =function(x:real):real; {тип функція з одним параметром та результатом дійсного типу} nonparam=procedure; {тип процедура без параметрів }
Змінні процедурного типу var pr:= proc; ff:= fun;
Змінним процедурного типу можна надавати значення: - іншої процедурної змінної - ідентифікатору процедури чи функції (умовно можна розглядати як процедурну константу)
Для виконання надання треба виконувати правила сумісності по наданню для виразів зліва та справа від знаку операції, тобто: 1) вони повинні мати однакову кількість параметрів 2) параметри на тих самих позиціях повинні мати однаковий тип Якщо зправа від знаку надання стоїть ідентифікатор процедури чи функції: 3) вона не повинна бути стандартною 4) повинна бути відкомпільована із ключем { $F + } - force far call -> on (адреса переходу формується як < сегмент >:< зміщення >, а при наданні процедурній змінній присвоюється адреса відповідної процедури чи функції) чи в заголовку мати опис ;far 5) така процедура не повинна бути вкладенною (описаною у тілі іншої процедури чи функції) 6) не повинна бути типу INLINE 7) не повинна бути процедурою переривання - INTERRUPT
Приклад:
var x:real; f:function(x:real):real; {$F+} function tan(angle:real):real; begin tan:=sin(angle)/cos(angle) end;
function f2(angle:real):real begin f2:=sqr(sin(angle)); end; {$F-} begin readln(x); if x>0 then f:=tan else f:=f2; writeln(f(x)); end.
|