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

Формальные и фактические параметры подпрограммы

При описании подпрограммы (процедуры или функции) в разделе описаний может быть указан список формальных параметров. В этом списке обычно перечисляются входные и выходные данные подпрограммы с указанием их типов Если такой список присутствует, то при вызове этой подпрограммы в разделе операторов должен быть указан список фактических параметров. Между списками формальных и фактических параметров подпрограммы (т.е. в описании и при вызове) должно быть точное попарное соответствие типов, причем тип формального параметра должен быть простым. При выполнении программы в момент вызова подпрограммы фактические параметры передают собственные значения своим формальным заменителям.

ПЕРЕДАЧА ПАРАМЕТРОВ

Фактические параметры подпрограммы могут быть переданы их формальным заменителям разными способами. Наиболее распространенными являются два способа передачи параметров:

  • по значению передают параметры- значения. Так можно передать только входные данные подпрограммы;

  • по адресу (по ссылке) передают параметры- переменные. Так можно передать и входные, и выходные данные входные данные подпрограммы .

Передача параметров по значению

program Prim;

procedure P(X:Byte);

b egin

end;

begin

P(7+1)

e nd.

  1. На месте фактического параметра может стоять Выражение.

  2. Формальный параметр должен быть описан без слова var, и его тип должен совпадать с типом значения, которое возвращает Выражение.

  3. При вызове подпрограммы для формального параметра выделяется участок памяти соответственно его типу, и туда записывается вычисленное значение Выражения.

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

  5. После окончания работы подпрограммы место, выделенное под формальные параметры - значения, очищается и хранящееся в нем значение теряется. Следовательно

  6. С помощью параметров - значений в подпрограмму можно передать входные данные, но нельзя получить выходные данные из подпрограммы.

Передача параметров по адресу (по ссылке)

program Prim;

var X:Byte;

procedure P(var Y:Byte);

b egin

end;

begin

X:=1;

P(X);

e nd.

  1. На месте фактического параметра может стоять только Имя переменной.

  2. Формальный параметр должен быть описан со словом var, типы переменных X и Y должны в точности совпадать, сами же имена переменных могут совпадать или нет.

  3. При вызове подпрограммы для формального параметра Y передаётся адрес ячейки памяти, где расположена переменная X.

  4. В течение работы подпрограммы все изменения значения Y происходит в ячейках памяти, выделенных для X (в одном и том же месте).

  5. После окончания работы подпрограммы имя переменной Y “забывается”, а изменения, сделанные в ячейках X остаются. Следовательно

  6. С помощью параметров - переменных в подпрограмму можно передавать входные данные, и получать из нее выходные данные .

Порядок следования описаний параметров

Порядок следования параметров, передаваемых по ссылке и по значению, может быть любым:

t ype Massiv = array [1..20] of Real; Mas, Sum1, Sum2 переданы по ссылке

var M:Massiv; S1,S2:Real;L:Byte;

procedure P( X,Y: Byte; var Mas:Massiv; var Sum1,Sum2:Real; N:Integer;);

b egin

end

X,Y и N переданы по значению

begin

…

P(2,L,M,S1,S2,L+8);

end.

Область действия идентификаторов подпрограмм

Областью действия (сферой видимости) идентификатора называется часть программы, где он может быть использован.

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

Правила определения области действия для идентификаторов подпрограмм

  1. действуют все идентификаторы, определенные внутри подпрограммы;

  2. действуют все идентификаторы окружающего контекста, если их имена отличаются от имен, объявленных внутри подпрограммы;

  3. локальные идентификаторы подпрограммы во внешнем окружении действовать не будут;

  4. в случае совпадения имен глобального и локального идентификаторов действовать будет только внутренний локальный идентификатор.

program Prim;

var A0,B0,C0 : Integer;

p rocedure P1;

begin

з десь нет подпрограмм, которые можно было бы вызвать

end;

procedure P2;

var A1,B1,C1 : Integer;

procedure P3;

begin

з десь можно вызвать процедуру P1

end;

procedure P4;

var A2,B2,C2:Integer;

begin

з десь «доступны» переменные A0,B0,C0,A1,B1,C1,A2,B2,C2

здесь можно вызвать процедуру P1 или P3

end;

begin

з десь «доступны» переменные A0,B0,C0,A1,B1,C1

здесь можно вызвать процедуру P1

end

begin

здесь «доступны» переменные A 0,B0,C0

здесь можно вызвать процедуру P1 или P2

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]