Синтаксис объявления процедуры следующий: «¡Объявление процедуры > «¡Заголовок процедуры>; «¡Тело процедуры>; «¡Заголовок процедуры> :: = Procedure : := «¡Раздел локальных объявлений> «¡Составной оператор> В заголовке процедуры указывается имя процедуры и описывается список формальных параметров (если он присутствует). За заголовком может следовать раздел локальных объявлений (меток, типов, констант, переменных, вложенных процедур и функций). Раздел локальных объявлений может отсутствовать в том случае, если процедура использует только глобальные объявления. Запуск процедуры на исполнение осуществляется с помощью оператора процедуры, в котором содержатся имя процедуры и фактические параметры. Последовательность операторов, реализующих алгоритм процедуры, записывается внутри составного оператора (блока) процедуры. Если в каком-либо операторе внутри блока процедуры используется идентификатор самой процедуры, то процедура будет выполняться рекурсивно, т. е. при выполнении будет обращаться сама к себе. Приведем пример объявления процедуры: // Преобразование целого числа в строку // восьмеричного представления Procedure OctStringfNmb: Integer; Var S; string); // Заголовок процедуры со списком формальных параметров: II Nmb - исходное целое число; S - строка для записи II результата преобразования Var Р: Integer; // Объявление локальной переменной Р Begin Р := Abs(Nmb); S := ' Repeat S := S + chr(P mod 8); P := P div 8; Until P = 0; Xf Nmb < 0 Then S := + S; End; В дальнейшем для вызова процедуры из основной программы или подпрограммы необходимо записать оператор процедуры со списком фактических параметров, которые должны совпадать по количеству и типам с формальными параметрами процедуры. Например, в результате выполнения фрагмента программы: OctString(InpNmb,Resultstring); Resultstring := 'Число '+str(InpNmb)+ ' в восьмеричной с.с. равно '+ResultString; в переменной Resultstring типа String формируется запись старого и нового представления целого числа InpNmb. Объявления функций Функция — это подпрограмма, вычисляющая и возвращающая некоторое значение. Оператор функции может быть исполь- юван в качестве операнда при построении выражения. Синтаксис объявления функции следующий: ::= ;; ::= Function : :Идентификатор типа> ::= «Составной оператор> Основное отличие заголовка функции от заголовка процедуры (помимо используемого для объявления служебного слова) в Том, что заголовок функции дополнительно содержит указание НВ тип возвращаемого функцией значения — тип результата. Оператор функции при ее вызове обычно стоит либо в правой части оператора присваивания, либо входит на правах операнда в выражение, либо указывается в качестве фактического Параметра при вызове другой подпрограммы. Вызов функции Содержит идентификатор функции и список фактических параметров, совпадающий по размеру и типам со списком формальных параметров. После выполнения тела функции возвращается Значение, тип которого совпадает с типом результата функции. Операторная часть тела функции содержит операторы, реализующие алгоритм получения результата объявленного типа, При этом в операторной части должен находиться по крайней Мере один оператор присваивания, в котором в левой части СТОИТ идентификатор функции. Результатом выполнения функции будет последнее значение, присваиваемое идентификатору функции. Если такого оператора присваивания нет или он не ■Ыполняется, то возвращаемое функцией значение не будет определено. Если идентификатор функции используется для вызова функции внутри операторной части тела функции, то функция выполняется рекурсивно. Приведем пример объявления функции: // Функция вычисления суммы квадратов первых // N чисел натурального ряда Function SumSqr(N: Integer): Integer; Var S, i: Integer; Begin S := 1; For i := 2 To N Do S := S+i*i; SumSqr := S; // Присваивание значения результату //функции End; Для вызова функции из основной программы или из другой подпрограммы (например, при вычислении значения выражения) необходимо в выражении указать оператор функции со списком фактических параметров: ЫпеЬеп := ЬодЮ (X)/SumSqr (I) ; Здесь ЬодЮ (X) — вызов стандартной функции вычисления десятичного логарифма фактического параметра х; БитБдг (I) — вызов функции вычисления суммы квадратов с фактическим параметром I.