Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
конспект_лекций.doc
Скачиваний:
18
Добавлен:
26.04.2019
Размер:
1.11 Mб
Скачать

12.1. Подпрограммы типа procedure

Синтаксис и структура операторов описывающих операцию:

Procedure ИмяP( P1; P2; …; Pn);

< <

блок описания переменных, используемых только внутри

самой подпрограммы, т.е. вспомогательных

или «рабочих» переменных подпрограммы.

> >

Begin

< <

Блок исполнимых операторов подпрограммы, т.е. описание

новой операции в форме упорядоченной последовательности

известных (стандартных или ранее описанных) операций.

> >

End;

Procedure – ключевое слово оператора,

ИмяP – название (идентификатор) новообразуемой

операции типа-процедура,

( P1; P2; …; Pn)– строго упорядоченный (через разделитель – точка с запятой) перечень описаний всех информационных объектов, которые являются «формальными переменными подпрограммы» и используются только для синтаксически-грамотного описания исполнимых операторов внутри самой подпрограммы. Сами же имена P1, P2,… «не видны головной программе», головная программа знает только о типах этих переменных.

При обращении к подпрограмме вместо этих «формальных параметров» указываются «фактические переменные головной программы», которые

  • либо передают в подпрограмму данные для обработки «внутри подпрограммы», т.е. выполняют роль аргументов создаваемой программистом операции,

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

Синтаксис языка Pascal допускает три разных способа (варианта) описания параметров подпрограммы, что обеспечивает три разных способа передачи (обмена) информации между подпрограммой и вызывающей ее головной программой:

  • если описание параметра Pi задается структурой

Var ИмяPi: ТипPi;

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

При обращении к подпрограмме, т.е. при вызове подпрограммы из головной программы, вместо этой рабочей переменной с именем ИмяPi будет использоваться та реальная переменная, которая будет создана (обязательно должна быть создана!) непосредственно в головной программе. Разумеется, эта реальная переменная должна быть того же типа, что и рабочий параметр, т.е. типа ТипPi.

Пояснение: в процессе трансляции текста подпрограммы, т.е. при переводе ее на внутренний язык ЭВМ, вместо адресов, описанных таким образом переменных, вносятся чистые нули. Эти нули автоматически заменяются на реальные адреса реальных переменных только в момент «вызова подпрограммы на выполнение».

Описанные таким образом переменные-параметры позволяют передавать информацию: как из головной программы в подпрограмму, так и в обратном направлении – из подпрограммы в головную программу.

  • если описание параметра Pi задается структурой ИмяPi: ТипPi;

то, в процессе трансляции подпрограммы, для переменной-параметра с именем ИмяPi выделяется необходимая оперативная память, т.е. эта переменная «почти автономна», а ее содержимое недоступно головной программе. Однако, при «вызове программы на выполнение» в эту переменную копируется содержимое из той переменной, имя которой будет указано программистом.

Пояснение: Описанные таким образом переменные-параметры позволяют только односторонне передавать информацию: из головной программы в подпрограмму. Достоинство таких параметров – операции выполняемые в подпрограмме не могут испортить информацию головной программы. Недостаток – заведомое дублирование информации, т.е. нерациональные затраты оперативной памяти.

  • если описание параметра Pi задается структурой Var ИмяPi;

т.е. не указывается тип параметра-переменной, то в подпрограмму передается только адрес (местоположение в оперативной памяти) той реальной переменной, имя которой будет указано в операторе «вызова подпрограммы на выполнение». Как читать или изменять информацию по указанному адресу, какого она типа, структуры и размера, обычно сообщается через другие параметры этой подпрограммы.

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