- •1 Языки программирования. Язык Pascal. Описание синтаксиса языка программирования.
- •2 Лексическая структура языка Pascal. Структура Pascal-программы. Составной оператор. Константы. Переменные
- •3 Концепция переменной языка Pascal
- •4 Концепция типа данных языка Pascal
- •5 Простые типы языка Pascal
- •6 Стандартные типы языка Pascal
- •7 Операторы языка Pascal
- •8 Составные типы языка Pascal
- •9 Множества (определение, примеры, операции). Представление множеств, примеры использования
- •10 Файловый тип. Операции с файлами.
- •11 Процедуры и функции. Описание процедуры. Оператор процедуры
- •12 Параметры процедур и функций.
- •13 Процедурный тип. Передача процедур и функций в качестве параметра.
- •14 Директивы, используемые при описании процедур и функций.
- •15 Необходимость и преимущества модульного программирования. Структура модуля в языке Pascal.
- •16 Рекурсия. Рекурсия и итерация.
- •17 Линейный поиск. Поиск делением пополам (двоичный поиск).
- •18 Простые алгоритмы сортировки.
- •19 Усовершенствованные алгоритмы сортировки. Сортировка Шелла. Сортировка Шелла
- •20 Ссылочные типы. Динамические структуры данных
- •21 Связанные списки, операции над списками.
- •22 Двусвязные кольца.
- •23 Двоичные деревья поиска
11 Процедуры и функции. Описание процедуры. Оператор процедуры
Процедурой в Pascal называется особым образом оформленный фрагмент программы, имеющий собственное имя. Упоминание этого имени в тексте программы приводит к активизации процедуры и называется ее вызовом. Сразу после активизации процедуры начинают выполняться входящие в нее операторы, после выполнения последнего из них управление возвращается обратно в основную программу и выполняются операторы, стоящие непосредственно за оператором вызова процедуры. Для обмена информацией между основной программой и процедурой используется один или несколько параметров вызова. Если параметры есть, то они перечисляются в круглых скобках.
Функция отличается от процедуры тем, что результат ее работы возвращается в виде значения этой функции и, следовательно, вызов функции может использоваться наряду с другими операндами в выражениях.
Имеются также стандартные процедуры и функции, они являются неотъемлемой частью среды Pascal.
Описание процедуры начинается зарезервированным словом Procedure, за которым следует имя процедуры и список формальных параметров. Список параметров заключается в круглые скобки и содержит перечень параметров с указанием их типа. Зарезервированное слово Procedure, имя процедуры и список ее параметров образуют
заголовок процедуры. Затем следует тело процедуры, содержащий раздел описаний и раздел исполняемых операторов.
В процедуре раздел исполняемых операторов начинается с составного оператора, т.е. последовательности произвольных операторов, заключенных в операторные скобки – begin … end. Например:
Program Ex1;
Procedure Proc1;
Var X:integer;
Begin
{тело процедуры}
End;
Begin
{тело программы}
End.
Оператор процедуры определяет активизацию процедуры, обозначенную с помощью идентификатора процедуры. Если соответствующее объявление процедуры содержит список формальных параметров, то оператор процедуры должен содержать в себе соответствующий ему список фактических параметров. При вызове происходит передача фактических параметров формальным параметрам.
Приведем некоторые примеры операторов процедур:
PrintHeading;
Transpose(A, N, M);
Find(Name, Address);
Примечание: Процедуру можно также вызвать через переменную типа процедура.
12 Параметры процедур и функций.
Список формальных параметров необязателен и может отсутствовать. Если же он есть, то в нем должны быть перечислены имена формальных параметров и их типы. Параметры в списке отделяются друг от друга точками с запятой. Любой из формальных параметров может быть либо параметром-значением, либо параметром-переменной, либо параметром-константой.
Пример параметров-значения:
Procedure P (a,b :real);
Function F (a: integer): integer;
Если параметр определяется параметры-переменные, перед ними необходимо ставить зарезервированное слово VAR, а если это параметры-константы, - слово CONST, например:
Procedure MyProc (var a: real; const c: string);
Если формальный параметр объявлен как параметр-переменная, то при вызове подпрограммы ему должен соответствовать фактический параметр в виде переменной нужного типа; если формальный параметр объявлен как параметр-значение или параметр-константа, то при вызове ему может соответствовать произвольное выражение.
Если параметр определен как параметр-значение, то перед вызовом подпрограммы это значение вычисляется, полученный результат копируется во временную память и передается подпрограмме. Любые возможные изменения в подпрограмме параметра-значения никак не воспринимаются вызывающей программой, так как в этом случае изменяется копия фактического параметра.
Если параметр определен как параметр-переменная, то при вызове подпрограммы передается сама переменная, а не ее копия (фактически в этом случае подпрограмме передается адрес переменной). Изменение параметра-переменной в подпрограмме приводит к изменению самого фактического параметра в вызывающей программе.
В случае параметра-константы в подпрограмму также передается адрес области памяти, в которой располагается переменная или вычисленное значение. Однако, компилятор блокирует любые присваивания параметру-константе нового значения в теле подпрограммы.
Так же в процедурах могут использоваться нетипизированные параметры. Параметр считается нетипизированным, если тип формального параметра-переменной в заголовке подпрограммы не указан, при этом соответствующий ему фактический параметр может быть переменной любого типа. Нетипизированными могут быть только параметры-переменные. Нетипизированные параметры используются обычно в том случае, когда тип данных несущественен.
