Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторні роботи з програмування Модуль 3.DOC
Скачиваний:
9
Добавлен:
23.02.2016
Размер:
1.45 Mб
Скачать

9. Процедури і функції. Процедурні типи

Для організації передачі процедур і функцій в ролі параметрів при зверненні до інших процедур і функцій введено процедурний тип. Існує два процедурних типи: тип-процедура і тип-функція. Для опису процедурного типу використовується заголовок процедури або функції, в якому опускається ім’я, наприклад:

TYPE Tproc = Procedure (a, b, c: double; var v, w: double );

TFun = Function ( x, y: double): double;

Function Sum( x, y: double): double; far;

Begin

Result:=x+y;

End;

VAR P: Tproc;

F: Tfun;

a, b, c, d, z: double;

BEGIN

writeln (‘Введіть a, b, c, d’);

readln (a, b, c, d);

F:=Sum;

z:=Sum(a, b) – F(c, d);

writeln (‘z=’,z);

END.

Із прикладу видно, що процедурній змінній P можна присвоювати як значення ім’я процедури, а змінній F ім’я функції. Після присвоєння ім’я змінної стає синонімом імені підпрограми і його можна використовувати для звернення до підпрограми.

Процедура або функція, яка присвоюється процедурній змінній, повинна транслюватися з дальнім переходом (з директивою FAR). Крім цього вона не може бути стандартною процедурою або функцією і не може бути локальною, тобто вкладеною.

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

Приклад. Розробити програму обчислення, за формулою трапецій, таблиці значень інтеграла

,

з точністю =0.00001 для, що змінюється на інтерваліз кроком=1.

Для розв’язку задачі командою File!New Application створимо новий проект. На екрані з’явиться чиста форма з заголовком Form1. Присвоїмо цій формі заголовок Caption = Обчислення інтегралів і програмне ім’я Name = FINT. Командою File!Save All запишемо програмний модуль під іменем ULAB9_1.pas, а проект – LAB9_1.dpr.

Розмістимо на цій формі шість компонентів Edit для введення початкових даних: меж інтегрування – a, b; точності обчислення інтеграла – e; меж і кроку зміни параметра t – . Присвоїмо цим компонентам програмні імена Edit1, Edit2, Edit3, Edit4, Edit5, Edit6, встановлені за замовчуванням (властивість Name) і очистимо їм значення властивості Text.

Для виведення результатів розмістимо на формі компонент Memo (багаторядковий редактор) і встановимо йому такі значення властивостей: Name = Memo1 (програмне ім’я), ScrolBars=ssBoth (горизонтальне і вертикальне прокручування). У полі значення властивості Lines двічі клацнувши мишкою ввійдемо в редактор і очистимо значення цієї властивості.

Пояснення до цих компонентів зробимо за допомогою компонента Label (властивість Caption).

Крім цього, розмістимо на формі дві керуючі кнопки (компонент Button) з написами Обчислити та Вихід (властивість Caption) і програмними іменами Button1, Button2 (властивість Name) (Рис. 9.1).

Для написання обробників кнопок Обчислити та Вихід розмістимо функції обчислення підінтегральної функції та обчислення інтеграла в окремому програмному модулі, не пов’язаному з формою, з іменем UINTEG.

Для створення модуля, не пов’язаного з формою, потрібно виконати команду File!New і у вікні діалогу вибрати значок з підписом Unit, на екрані з’явиться заготовка модуля, яку слід запам’ятати під іменем UINTEG.

Рис 9.1. Форма Обчислення інтегралів.

Модуль UINTEG має вигляд:

unit UINTEG;