Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
инфа экзамен.docx
Скачиваний:
9
Добавлен:
25.09.2019
Размер:
235.09 Кб
Скачать

15. Процедуры. Назначение, варианты реализации.

 

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

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

Схема заголовка процедуры следующая:

PROCEDURE имя (параметры);

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

Вот примеры заголовков процедур:

PROCEDURE ALPHA (X: INTEGER; Y: REAL; Z: CHAR); PROCEDURE BETA (M: ARR);

В том месте программы, где нужно выполнить действия, предусмотренные в описании процедуры, ставят оператор процедуры:

имя (аргументы), где имя то же, что в заголовке процедуры;

ПРИМЕР. Описание и вызов процедуры, которая печатает сумму N первых элементов вещественного массива, type

Arr = array [1..100] of real; procedure PrintSum (R: Arr; N: integer); var

Summa: real; i: integer; begin

Summa := 0;

i:=1;

while i N do begin

Summa := Summa + R [i]; i:=i+1;

end;

writeln (Summa); end;

var

A: Arr; begin

PrintSum (A, 2.0); end.

Параметры-переменные

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

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

В списке параметров заголовка процедуры перед параметрами-переменными ставят слово VAR. Например,

procedure PrintSum (var R: Arr; N: integer);

Параметры-переменные можно использовать не только в процедурах, но и в функциях.

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

Для ответа на этот вопрос вообразите, что блок — это дом с зеркальными стеклами в окнах. Изнутри через них видно все, что находится снаружи, внутрь же заглянуть нельзя.

 

На рисунке изображен пример программы А, внутри которой описаны блоки В и С. Внутри В описаны D и Е, внутри С описан блок F, а в нем — G . Если вы пишете код блока F, то, согласно правилу зеркальных стекол, можете обращаться к блокам В, С, а также G и даже самому блоку F. Заметим, что обращение блока к самому себе называется рекурсией.

Видимость — это свойство всех описаний, а не только блоков. Находясь в блоке, можно пользоваться всем, что видно из него. Так из блока F видны переменные, описанные в С и А, но не видны переменные, описанные в В, D, Е и G.

Объекты, описанные в блоке, называются внутренними, а те, что описаны в блоках, охватывающих данный, — внешними по отношению к блоку. Внешние переменные дают дополнительный канал связи между блоками (основным каналом следует считать параметры и параметры-переменные). Пользоваться этим каналом надо осторожно, ибо он усиливает зависимость блоков друг от друга и этим затрудняет разработку программы.

Может статься, что имена разных внешних переменных совпадут. Какая из одноименных переменных будет видна из блока? Будет видна та, что описана в ближайшем из внешних блоков. Если же конкуренция возникнет между внешней и внутренней переменными, видна будет внутренняя.