Читайте также:
|
|
Нижче приводиться варіант програми 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 і закінчуються не крапкою, а крапкою з комою. Процедури і функції можуть мати свої власні константи, типи даних змінні і навіть власні процедури і функції. Але всі ці елементи можуть використовуватися тільки в тих процедурах і функціях, в яких вони визначені.
5.2 Описи функцій
Опис функції визначає частину програми, в якійобчислюються і повертається значення.
B заголовку функції визначається ідентифікатор функціїформальні параметри (якщо вони є) і тип результатуфункції.
Функція активізується при виклику функції. При викликуфункції указується ідентифікатор функції і які-небудь параметри, необхідні для обчислення функції. Виклик функції мoже включатися у вирази як операнд. Коли вираз обчислюється, функція виконується і значенням операнда стає значення, що повертається функцією.
B операторній частині блоку функції задаються оператори, які повинні виконуватися при активізації функції. B модулі повинен міститися принаймні один оператор присвоєння, в якому ідентифікатору функції привласнюється значення. Результатом функції є останнє привласнене значення. Якщо такий оператор привласнення відсутній або він не був виконаний, те значення, що повертається функцією, невизначено.
Якщо ідентифікатор функції використовується при виклику функції усередині модуля-функції, то функція виконується рекуpсивно.
Наведемо далі приклади описів функції:
function Max(а: Vector; n: integer): extended;
var
x: extended;
i: integer;
begin
x:= а(1);
for i:= 2 to n do if x < а[i] then x:= а[i];
Max:= x;
end;
та
function Power(x: extended; у: integer): extended;
var
z: extended;
i: integer;
begin
z:= 1.0; i:= у;
while i > 0 do
begin
if Odd(i) then z:= z*x;
x:= Sqr(x);
end;
Power:= z;
end;
Аналогічно до процедур, функції можуть описуватися, як випереджаючі, зовнішні або внутрішні. Проте функції переривань не допускаються.
Дата добавления: 2015-01-29; просмотров: 97 | Поможем написать вашу работу | Нарушение авторских прав |
|