Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1 Информатика и программирование.doc
Скачиваний:
10
Добавлен:
01.03.2025
Размер:
327 Кб
Скачать
☆

11 Процедуры и функции. Описание процедуры. Оператор процедуры

Процедурой в Pascal называется особым образом оформленный фрагмент программы, имеющий собственное имя. Упоминание этого имени в тексте программы приводит к активизации процедуры и называется ее вызовом. Сразу после активизации процедуры начинают выполняться входящие в нее операторы, после выполнения последнего из них управление возвращается обратно в основную программу и выполняются операторы, стоящие непосредственно за оператором вызова процедуры. Для обмена информацией между основной программой и процедурой используется один или несколько параметров вызова. Если параметры есть, то они перечисляются в круглых скобках.

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

Имеются также стандартные процедуры и функции, они являются неотъемлемой частью среды Pascal.

Описание процедуры начинается зарезервированным словом Procedure, за которым следует имя процедуры и список формальных параметров. Список параметров заключается в круглые скобки и содержит перечень параметров с указанием их типа. Зарезервированное слово Procedure, имя процедуры и список ее параметров образуют

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

В процедуре раздел исполняемых операторов начинается с составного оператора, т.е. последовательности произвольных операторов, заключенных в операторные скобки – begin … end. Например:

Program Ex1;

Procedure Proc1;

Var X:integer;

Begin

{тело процедуры}

End;

Begin

{тело программы}

End.

Оператор процедуры определяет активизацию процедуры, обозначенную с помощью идентификатора процедуры. Если соответствующее объявление процедуры содержит список формальных параметров, то оператор процедуры должен содержать в себе соответствующий ему список фактических параметров. При вызове происходит передача фактических параметров формальным параметрам.

Приведем некоторые примеры операторов процедур:

PrintHeading;

Transpose(A, N, M);

Find(Name, Address);

Примечание: Процедуру можно также вызвать через переменную типа процедура.

12 Параметры процедур и функций.

Список формальных параметров необязателен и может отсутствовать. Если же он есть, то в нем должны быть перечислены имена формальных параметров и их типы. Параметры в списке отделяются друг от друга точками с запятой. Любой из формальных параметров может быть либо параметром-значением, либо параметром-переменной, либо параметром-константой.

Пример параметров-значения:

Procedure P (a,b :real);

Function F (a: integer): integer;

Если параметр определяется параметры-переменные, перед ними необходимо ставить зарезервированное слово VAR, а если это параметры-константы, - слово CONST, например:

Procedure MyProc (var a: real; const c: string);

Если формальный параметр объявлен как параметр-переменная, то при вызове подпрограммы ему должен соответствовать фактический параметр в виде переменной нужного типа; если формальный параметр объявлен как параметр-значение или параметр-константа, то при вызове ему может соответствовать произвольное выражение.

Если параметр определен как параметр-значение, то перед вызовом подпрограммы это значение вычисляется, полученный результат копируется во временную память и передается подпрограмме. Любые возможные изменения в подпрограмме параметра-значения никак не воспринимаются вызывающей программой, так как в этом случае изменяется копия фактического параметра.

Если параметр определен как параметр-переменная, то при вызове подпрограммы передается сама переменная, а не ее копия (фактически в этом случае подпрограмме передается адрес переменной). Изменение параметра-переменной в подпрограмме приводит к изменению самого фактического параметра в вызывающей программе.

В случае параметра-константы в подпрограмму также передается адрес области памяти, в которой располагается переменная или вычисленное значение. Однако, компилятор блокирует любые присваивания параметру-константе нового значения в теле подпрограммы.

Так же в процедурах могут использоваться нетипизированные параметры. Параметр считается нетипизированным, если тип формального параметра-переменной в заголовке подпрограммы не указан, при этом соответствующий ему фактический параметр может быть переменной любого типа. Нетипизированными могут быть только параметры-переменные. Нетипизированные параметры используются обычно в том случае, когда тип данных несущественен.