Описание подпрограммы-функции



Подпрограмма-функция аналогична процедуре, но имеет следующие отличия.

1. Заголовок функции имеет вид

Function имя (формальные параметры): тип функции;

2. Функция имеет только один результат выполнения.

3. Результат обозначается именем функции, поэтому в разделе операторов функции обязательно должен присутствовать оператор присваивания, в левой части которого стоит имя этой функции.

4. Вызов функции в основной программе осуществляется непосредственно внутри выражения по ее имени с указанием фактических параметров.

 

Пример 3: Оформить вычисления суммы квадратов натуральных чисел от 1 до n в виде функции:

Function Lux (N:Integer): Integer;

Var s,i: Integer;

Begin

S:=0;

For i:=1 To N Do S:=S + Sqr(i);

Lux:=S;

End;

 

Вызов функции в основной программе может иметь вид

W:=Lux (10);

Здесь W – переменная типа Integer.

Замечание. При использовании подпрограмм процедур и функций следует иметь в виду, что переменные, представленные в разделе описания основной программы (Program), действуют в разделе операторов основной программы и в любой ее подпрограмме. Эти переменные называются глобальными. Переменные, описанные в подпрограмме, действуют только в этой подпрограмме и в любой объявленной в ней процедуре и функции. Такие переменные называются локальными. Они недоступны для операторов основной программы и других подпрограмм.

Пример 4:  В программе вводится пара чисел X и Y и выводится на экран дисплея результат возведения X сначала в степень +Y, а затем - в степень -Y. Для выхода из программы нужно ввести Ctrl -Z и Enter.

var х,у:Real;

Function Power (a, b : Real): Real;

begin {Power}

       if a > 0 then Power := exp(b * Ln (a))

       else

                   if a < 0 then Power := exp(b * Ln(abs(a))

                   else

                              if b = 0 then Power := 1

                              else Power := 0

end {Power} ;

{--------------------}

begin {main}

       repeat

       readln(x,y) ;

                   writeln (Power (x,y) :12:10, Power (x, -y) : 15 : 10)

       until EOF

end {main} .

 

Пример 5:  В программе задаются два целых числа 5 и 7, эти числа передаются процедуре INC2, в которой они удваиваются. Один из параметров передается как параметр-переменная, другой - как параметр-значение. Значения параметров до и после вызова процедуры, а также результат их удвоения выводятся на экран.

а : Integer = 5;

b : Integer = 7 ;

{-----------------}

Procedure Inc2 (var c: Integer; b: Integer) ;

begin {Inc2}

       с := с + с;

       b := b + b;

WriteLn ( 'удвоенные: ', c:5, b:5)

end {inc2};

{--------------}

begin {main}

       WriteLn('исходные: ', a:5, b:5);

       Inc2(a,b);

       WriteLn('результат: ', a:5, b:5)

end {main}.

В результате прогона программы будет выведено:

исходные: 5 7

удвоенные: 10 14

результат: 10 7

Как видно из примера, удвоение второго формального параметра в процедуре INC2 не вызвало изменения фактической переменной В, так как этот параметр описан в заголовке процедуры как параметр-значение. Этот пример может служить еще и иллюстрацией механизма «накрывания» глобальной переменной одноименной локальной: хотя переменная В объявлена как глобальная (она описана в вызывающей программе перед описанием процедуры), в теле процедуры ее «закрыла» локальная переменная В, объявленная как параметр-значение.

Контрольные вопросы

1. Дайте определение понятию «подпрограмма».

2. Структура подпрограммы. Опишите входящие в нее компоненты.

3. Опишите порядок обращения подпрограмм друг к другу.

4. Дайте определение понятию «подпрограмма-процедура».

5. Дайте определение  формальным параметрам. Опишите их виды.

6. Перечислите стандартные директивы и назовите действия, которые они задают компилятору.

7. Опишите вызов процедуры. Примеры.

8. Дайте определение понятию «подпрограмма-функция».

9. Назовите различия между глобальными и локальными переменными.


Дата добавления: 2020-11-27; просмотров: 108; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!