Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 основи програмування книга.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.77 Mб
Скачать

5.4. Функції

Поряд із стандартними функціями, у мові можна визначити і інші необхідні програмі функції. Функція – це підпрограма, що визначає одне - єдине скалярне або посилальне значення, що використовується при обчисленні виразу. Описання функції має, по суті, такий самий вид, як і описання процедури. Різниця тільки у заголовку, який має вид:

Function < ім’я > : < тип результату > ;

або

Function < ім’я > (<описи аргументів (параметрів)>): < тип результату>;

Синтаксична діаграма заголовка функції:

Заголовок

функції

Зверніть увагу на те, яким чином визначено тип значення функції.

Таким чином, для функції визначені всі ті поняття, які були сформульовані для процедур.

Ім’я, що задане в заголовку функції, іменує цю функцію. В середині описання функції – в розділі операторів – повинно бути присвоювання, в лівій частині якого стоїть ім’я функції, а в правій – вираз що має тип значення функції.

5.5. Приклади

Приклад 5.3. Функція GCD (алгоритм Евкліда) обчислює найбільший спільний дільник двох натуральних чисел х і у.

Function GCD (x, y : Integer) : Integer ;

Begin

While x <> y do

If x < y

then y := y - x

else x := x - y ;

GCD := x

End;

Приклад 5.4. Функція IntPow підносить дійсне число x до цілого степеня N. (Y = x N )

Function IntPow(x: Real; N: Integer) : Real;

Var

i: Integer;

Begin

IntPow := 1;

For i:=1 to Abs(N) do IntPow := IntPow * x;

If N < 0 then IntPow := 1/IntPow

End;

Приклад 5.5. Програма обчислює найбільший спільний дільник послідовності натуральних чисел, яка представлена масивом.

Program GCD_of_Array;

Const

n = 100 ;

Var

i, D : Integer;

A : Array[1..n] of Integer;

Function GCD (x, y : Integer) : Integer ;

Begin

While x <> y do

If x < y

then y := y - x

else x := x - y;

GCD := x

End;

Begin { основна програма }

{Процедура читання масиву натуральних чисел}

D := GCD (A[1], A[2]);

For i := 3 to n do D := GCD(D, A[i]);

writeln ( ‘ НCД послідовності = ‘ , D )

End.

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

Main

A

Поняття локальних і глобальних об’єктів поширюються і на вкладені процедури. Наприклад, змінна, описана в процедурі А локальна по відношенню до основної програми і глобальна для процедур В і С, вкладених в А.

В деяких випадках необхідно з процедури здійснити виклик іншої процедури, описаної в тому ж розділі процедур і функцій. Наприклад, процедура С може містити оператор виклику процедури В. В цьому випадку компілятор правильно обробить текст програми, оскільки процедура В описана до процедури С. Якщо ж з процедури В необхідно звернутись до С, для правильної обробки виклику С необхідно використовувати механізм так званого попереднього описання С. Описання, що опереджає процедури (функції) – це її заголовок, услід за яким через “;” стоїть службове слово Forward. У тексті програми описання, що опереджає, повинно передувати процедурі, в якій процедура, що попередньо описана, викликається.

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

Procedure A (x : TypeX; Var y : TypeY); Forward;

Procedure B (z : TypeZ) ;

Begin

... A( p, q); ...

End;

Procedure A;

Begin

...

End;