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

Процедуры и функции

 

1. Блочная структура программ

Подпрограмма - обособленная именованная часть программы со своим собственным локальным контекстом имён.

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

2. Общая структура подпрограммы

Структура подпрограммы в Турбо-Паскале почти буквально повторяет структуру всей программы, и в общем случае состоит из 3-х основных компонент:

  • Интерфейс подпрограммы (информация, необходимая для её вызова). Сосредоточен в заголовке.

  • Локальный контекст подпрограммы (совокупность описаний объектов, с которыми осуществляются действия)

  • Собственно действия, составляющие смысл подпрограммы (последовательность операторов и вызовов подпрограмм, то есть программа на Паскале).

Процедуры и функции различаются назначением и способом использования.

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

Смысл функций - определить алгоритм вычисления нового значения некоторого простого или ссылочного типа. Функция, это подпрограмма, которая, как и процедура, что-то делает, но, помимо этого, она обязательно возвращает значение, тип которого задается при описании заголовка процедуры. Вызов функции является одним из допустимых операндов выражения, обозначая в нём то значение, которое вычисляет функция, то есть, если подпрограмма с идентификатором “Function1” – функция, то можно произвести следующие действия:

X:=Function1(“параметры – аргументы функции”); X:=2*Function1(a,e,…,m,…)-1/Function1(c,f,…,k,…); и т.д.

3. Области видимости объектов

  • Имена объектов, описанных в некотором блоке, считаются известными в пределах данного блока, включая и все вложенные блоки.

  • Имена объектов, описанные в блоке, должны быть уникальными в пределах данного блока и могут совпадать с именами объектов из других блоков.

  • Если в некотором блоке описан объект, имя которого совпадает с именем объекта, описанного в объемлющем блоке, то последнее становится недоступным в данном блоке (экранировка).

Пример: Program X; Var   I,j:integer;   z:real;   Procedure x1(i:integer;);   Var     j:integer;     begin     End;   Begin   End;   Procedure x2;   Var      z:integer;      Procedure x3(z:string);      Begin      End;      Function y4(z:string):integer;      Begin      End;   Begin   End; Begin End.

Приведенная ниже диаграмма показывает видимость идентификаторов в примере. Каждый идентификатор виден в пределах того прямоуголльника, в котором он описан и в прямоугольниках, содержащихся в данном. За пределами этого прямоугольника идентификатор либо неизвестен, либо имеет другое значение, тип. Так, например, функция y4 может быть вызвана лишь внутри процедур x2 и x3, аналогично и x3. Переменные z в теле пограммы и в каждой из x2, x3, y4 имеют абсолытно разные и независимые значения, а в x1 видима таже z, что и в теле программы.В тоже время переменные i и j перекрыты в x1 новыми определениями, а в x2, x3, y4, они те же, что и в основной программе.