Процедуры


Begin

оператор 1; оператор 2; ... оператор n

end;

 

 
 
Рис.6.2. Структура описания подпрограммы  

 

 


Описание подпрограмм размещают в разделе описаний вызывающей программной единицы вместе с описанием констант, типов и переменных.

Локальные и глобальные имена.Каждая программная единица, будь то главная программа или подпрограмма, оперирует с различными объектами: константами, типами, переменными, имеющими свои имена. Желание придать подпрограмме относительную независимость в использовании имён привело к разделению их на глобальные (общие) и локальные (местные).

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

1. Имена объектов, описанных в разделах const, type и var главной программы, являются глобальными, т.е. доступными для использования как в ней самой, так и во всех вложенных в неё программных единицах.

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

 

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

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

Фактические параметры – это те исходные данные, которые передаются в подпрограмму с целью их обработки.

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

Оператор вызова процедуры состоит только из обращения к процедуре (аналог - обращение к стандартной функции) и имеет вид

имя процедуры (список фактических параметров);

Допустим, что у нас имеется процедура treug, которая вычисляет площадь треугольника по трём его сторонам a, b и c. Тогда вызывающий оператор может выглядеть так

treug (a, b, c);

или

treug(1.2, 2.3, 1.5);

В первом случае фактическими параметрами, задающими длины сторон треугольника, являются имена переменных, а во втором – константы.

Формальные параметры используются при описании процедуры. Формальными параметрами могут быть только имена переменных. Они располагаются в заголовке процедуры, вид которого

Procedure имя процедуры (список формальных параметров);

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

1) на этапе разработки процедуры с их помощью показывают, как процедура обрабатывает исходные данные, т.е. они наряду с другими переменными используются для описания алгоритма, который выполняет процедура;

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

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

Формальные параметры процедуры делятся на входные и выходные.

Входные параметры могут принимать значения фактических параметров, изменятьих в ходе выполнения процедуры нельзя. Их описание в заголовке процедуры выглядит так:

имя1, имя2, ... : тип 1; имя3, имя4, ... : тип 2; ...

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

Далее эти копии обрабатываются процедурой, причем фактические параметры будут существовать только в течение времени ее выполнения.

Пример 6.2. Используя процедуру, вычислить площадь треугольника со сторонами a, b и c. Для решения задачи воспользоваться формулой Герона s = (p×(p – a)×(p – b)×(p – c))1/2, где p – полупериметр треугольника.