Читайте также:
|
|
Подпрограмма-функция аналогична процедуре, но имеет следующие отличия.
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. Назовите различия между глобальными и локальными переменными.
Дата добавления: 2014-12-18; просмотров: 104 | Поможем написать вашу работу | Нарушение авторских прав |