Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсова робота1_1.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
287 Кб
Скачать
☆

5.1 Описи процедур

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

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

Наведемо приклад опису процедури:

procedure NumString(N: integer; var S: string);

var

V: integer;

begin

V := Abs(N);

S := '';

repeat

S := Chr(N mod 10 + Ord('0'))+ S;

N := N div 10;

until N = 0;

if N < 0 then S := '-' + S;

end;

B описі процедури перед блоком операторів може вказується директива переривання (interrupt). Процедура в цьому випадку розглядається, як процедура переривання. Повний опис процедур переривання приводиться у спеціальній та довідковій літературі по паскалю. B даний момент відзначимо що процедури обробки переривання не можна викликати з допомогою операторів процедури, і що в кожній з них задається список параметрів, який обов'язково повинен мати наступний вигляд:

procedure MyInt( Flags,CS,IP,AX,BX,CX,DX,SI,DI,DS,ES,BP): word); interrupt;

Замість блоку операторів в описі процедури або функції можна записати випереджаючий опис (опис forward), зовнішній опис (опис external) або внутрішній опис (опис inline).

Приклад програми

Нижче приводиться варіант програми DORATIO.PAS, в якому використовується процедура для отримання двох значень і функція для обчислення коефіцієнта:

program DoRatio;

var

A,B : integer;

Ratio : real;

procedure GetData(var X,Y : integer);

begin

Write('Введіть два числа: ');

Readln(X,Y)

end;

function GetRatio(I,J : integer): real;

begin

GetRatio := I/J

end;

begin

GetData(A,B);

Ratio := GetRatio(A,B);

Writeln(' Відношення рівне ',Ratio)

end.

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

При компіляції і запуску програми першим в тілі програми виконується оператор GetData(A,B). Цей тип оператора називається викликом процедури. При обробці цього виклику програма виконує оператори в GetData, замінюючи X і У (формальні параметри) на А і B (фактичні параметри). Ключове слово var перед X і У в операторі виклику процедури GetData вказує, що фактичні параметри повинні бути змінними і що значення змінних можуть бути змінені і передані назад програмі, що їх викликала. Тому процедурі GetData не можна передавати, константи, вирази і так далі. При завершенні виконання GetData управління передається в основне тіло програми оператору, наступному за викликом GetData.

Цим наступним оператором є виклик функції GetRatio. Відзначимо тут деякі важливі відмінності. По-перше, GetRatio повертає значення, яке потім повинне бути де-небудь використано; в даному випадку це значення присвоюється Ratio. Пo-друге, в основному тілі функції значення привласнюється GetRatio. Taким чином функція визначає яке значення слід повернути. По-третє, перед формальними параметрами I і J тут відсутнє ключове слово var. Це означає, що фактичні параметри можуть бути довільними цілочисельними виразами, наприклад, Ratio:= GetRatio(A+B,300), і що навіть якщо значення формальних параметрів в тілі функції буде змінено, нові значення не будуть передані назад програмі. Це, до речі, не є відмінністю між процедурами і функціями; можна використовувати обидва типи параметрів із будь-яким видом підпpoгpaм.

Функції мають такий же формат, що і процедури за виключенням того, що вони починаються із заголовка function і закінчуються типом даних для значення функції, що повертається:

function ім’я функції (параметри): тип даних;

Як бачимо, тут є тільки дві відмінності від структури звичайної програми: процедури і функції починаються із заголовка procedure або function, а не із заголовка program і закінчуються не крапкою, а крапкою з комою. Процедури і функції можуть мати свої власні константи, типи даних змінні і навіть власні процедури і функції. Але всі ці елементи можуть використовуватися тільки в тих процедурах і функціях, в яких вони визначені.