турбо паскаль

Процедурні типи - це нововведення фірми Borland (у стандартному Паскалі таких типів немає). Основне призначення цих типів - дати програмісту гнучкі засоби передачі функцій і процедур в якості фактичних параметрів звернення до інших процедур і функцій.

Prod = Procedure (a, b, c: Real; var d: Real);

Proc2 = Procedure (var a, b);

Func1 = Function: String;

Func2 = Function (var s: String): Real;

Як видно з наведених прикладів, існує два процедурних типу: тип-процедура і тип-функція.

Приклад 8.3 ілюструє механізм передачі процедур в якості фактичних параметрів виклику. Програма виводить на екран таблицю двох функцій:

sin1 (х) = (sin (x) + 1) * ехр (х)

cos1 (x) = (cos (x) + 1) * exp (-x).

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

Func = Function (x: Real). Real;

Procedure PrintFunc (XPos: Byte; F: Func);

PrintFunc (40, cos1)

Зверніть увагу: для встановлення правильних зв'язків функцій SIN1 і COS1 з процедурою PRINTFUNC вони повинні компілюватися з розрахунком на далеку модель пам'яті. Ось чому в програму вставлені стандартні директиви FAR відразу за заголовками функцій. У такому режимі повинні компілюватися будь-які процедури (функції), які будуть передаватися в якості фактичних параметрів виклику.

Стандартні процедури (функції) Турбо Паскаля не можуть передаватися розглянутим способом.

У програмі можуть бути оголошені змінні процедурних типів, наприклад, так:

р. array [1..N] of Proc1;

Змінним процедурних типів допускається привласнювати як значення імена відповідних підпрограм. Після такого присвоювання ім'я змінної стає синонімом імені підпрограми, наприклад:

Proc = Procedure (n: word; var a: Byte);

ProcVar: Proc; x, у. Byte;

Procedure Procl (x: word; var y: Byte); far;

if x> 255 then

Схожі статті