Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глава9.doc
Скачиваний:
1
Добавлен:
16.04.2019
Размер:
252.42 Кб
Скачать

9.2. Локальные и глобальные имена

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

Желание придать подпрограмме относительную независимость в использовании имён привело к разделению их на глобальные (общие) и локальные (местные).

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

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

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

  3. Если в двух программных единицах - объемлющей и вложенной совпадают имена различных объектов (что вполне допустимо), то во вложенной единице может быть использовано только имя локального объекта. Глобальное же имя для этой единицы становится недоступным. Говорят, что оно экранируется (закрывается) локальным именем.

Обратимся вновь к иерархической структуре программы (рис 9.1.). Имена объектов, описанных в программной единице А (главная программа), являются глобальными для всей программы и доступны не только для самой единицы А, но и для единиц В, С и D. Имена объектов единицы В для объемлющей единицы А являются локальными и для этой единицы не доступны, но доступны в пределах единиц С и D, для которых они являются глобальными. Сами же единицы С и D имеют каждая свои локальные имена, недоступные для единиц В и А.

9.3. Процедуры

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

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

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

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

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

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

Пример 9.1

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

treug (a, b, c);

или

treug(1.2, 2.3, 1.5);

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

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

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

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

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

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

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

Формальные параметры процедуры делятся на параметры-значения, параметры-переменные и бестиповые параметры2.