- •1. Общая структура программ в тп 7.0
- •2. Раздел объявлений и соглашений
- •3. Раздел текстов процедур и функций
- •4. Заголовок программы
- •Операторы языка Pascal
- •1. Составной и пустой операторы
- •2. Операторы ветвлений
- •3. Операторы повторений
- •Простые и структурные типы данных
- •1. Перечисляемый и ограниченный типы
- •2. Символьные строки
- •3. Множества
- •4. Записи
- •5. Запись с вариантами
- •6 Совместимость и преобразования типов
- •7 Типизированные константы
- •Процедуры и функции
- •1. Блочная структура программ
- •2. Общая структура подпрограммы
- •3. Области видимости объектов
- •4. Механизм передачи параметров
- •5. Предварительные и внешние описания подпрограмм
- •6. Специальные случаи
- •7. Рекурсия и побочный эффект
- •8. Распределение памяти под данные
- •9. Процедурные типы
Процедуры и функции
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, они те же, что и в основной программе.