- •А.Д. Кононов, а.А. Кононов Информатика
- •Введение
- •1. История развития языков программирования. Парадигмы программирования
- •Контрольные вопросы и упражнения
- •2. Языки программирования высокого уровня. Метаязыки для описания синтаксических конструкций
- •3. Паскаль – язык структурно-ориентированного программирования
- •3.1. Лексика и конструкции языка
- •3.2. Типы данных. Структуры данных
- •3.3. Выражения и операции
- •Контрольные вопросы и упражнения
- •3.4. Алгебра логики
- •Контрольные вопросы и упражнения
- •3.5. Построение программы
- •3.6. Операторы языка
- •3.7. Организация ввода – вывода
- •Контрольные вопросы и упражнения
- •3.8. Вызов процедур и функций
- •Заключение
- •Библиографический список
- •Послесловие
- •Глоссарий
- •Список сокращений (аббревиатур)
- •Краткий русско – английский словарь терминов
- •Диагностика ошибок трансляции
- •Оглавление
- •Кононов Александр Давыдович Кононов Андрей Александрович
- •394006, Воронеж, ул. 20-летия Октября, 84
3.8. Вызов процедур и функций
Процедуры и функции могут быть как внешними по отношению к вызывающей их программе, так и внутренними. Внешние процедуры хранятся в виде самостоятельных загрузочных модулей в библиотеках. Внутренние процедуры (функции) либо входят в раздел описания процедур и функций вызывающей программы, либо следуют за блоками вызывающей программы.
Вызов процедуры (функции) должен сопровождаться соответствующим указанием – директивой.
Вызов процедур осуществляется с помощью оператора вызова. Он состоит из идентификатора процедуры с перечнем действительных параметров в круглых скобках.
Перечень действительных параметров и их типы должны соответствовать списку и типам формальных параметров. Поэтому программист, перед тем как написать вызов, должен ознакомиться с описанием вызываемой процедуры.
Допустим, что необходимо воспользоваться процедурой, описание которой было сделано до написания главной программы, т. е. в разделе описания процедур. Например,
PROGRAM IT _IS_MY ;
(* разделы описания меток, констант, типов, переменных *)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
(* раздел описаний процедур и функций * )
PROCEDURE line ( x, y, z );
type
t: integer;
l: char;
var
x, y, i, j: t;
z : l;
begin
for i : = x то j := y do write ( z ) ;
end;
Тогда вызов этой процедуры в одном из последующих блоков главной программы I T –IS – MY будет оформляться следующим образом:
( * главная программа * )
begin
a: = ‘ * ‘;
x: = 10;
j : = 50;
line ( x, y, a );
end.
Однако если описание процедуры ( функции ) выполнено вслед за написанием блоков программы, а вызов такой процедуры необходимо сделать в одном из блоков, то в этом случае необходимо воспользоваться директивой FORWARD. Она укажет на то, что описание процедуры следует за её вызовом. Например,
(* главная программа *)
begin
a: = ‘ *’ ;
x: = 10;
y : = 50;
line ( x, y, z ); forvard;
end
( * описание процедуры line *)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Если вызываемая процедура является внешней по отношению к программе, то здесь могут быть два случая:
1. Внешняя процедура написана на языке Паскаль.
2. Внешняя процедура написана на каком–то другом языке.
В первом случае вызов необходимо оформить с использованием директивы EXTERNAL. Например,
line (a, b, c); external;
Во втором случае вместо директивы FORWARD необходимо указать директиву NONPASCAL. Например,
line (a, b, c); nonpascal;
При вызове внешней процедуры в списке параметров указываются не формальные параметры, которые объявлялись в описании процедуры, а действительные, которые объявлены в вызывающей программе. Действительные параметры при вызове процедуры заменяют формальные и фактически будут участвовать как операнды в выполнении процедуры. Поэтому последовательность написания действительных параметров и их типы должны строго соответствовать списку и типам формальных параметров, дабы избежать ошибок в результатах.
Программисту необходимо помнить о следующих ограничениях:
1. Если в качестве параметров допускаются процедуры и функции, то это могут быть такие процедуры и функции, собственные параметры которых являются значениями.
2. Действительными параметрами не могут быть стандартные процедуры и функции.
3. Компоненты упакованных структур не могут быть действительными параметрами.