|
Функция — это процедура, основным результатом работы которой является вычисление одного числового или логического значения. Описание процедуры-функции отличается от описания обычной процедуры двумя особенностями. В заголовке процедуры перед символом procedure (т. е. в самом начале заголовка) помещается описатель типа значения функции real, integer или Boolean. В теле процедуры-функции должен содержаться оператор присваивания, в левой части которого стоит идентификатор этой процедуры, а в правой части — выражение, определяющее значение функции. Таких операторов может быть даже несколько, но выполняться должен только один из них. Заметим, что такой оператор выполняет лишь символическое присваивание. Идентификатор процедуры-функции не обладает свойствами простой переменной, и присвоенное ему значение не может быть использовано в самом теле процедуры. Обращение к процедуре-функции производится с помощью указателя функции. Он состоит, как и оператор процедуры, из идентификатора процедуры и списка фактических параметров, заключенного в скобки, или только из идентификатора процедуры, если процедура описана без формальных параметров. Однако, в отличие от оператора процедуры, указатель функции является выражением, а не оператором, и может стоять в программе только там, где допускается помещать выражения, например, в качестве сперанта операции, правой части оператора присваивания, параметра оператора вывода и т. п. Некоторые из приведенных выше примеров процедур легко могут быть переделаны в функции. Например, описание процедуры h (12) следующим образом преобразуется в описание функции: Формальный параметр s процедуры ft здесь пришлось превратить в локальную переменную тела процедуры hi и добавить оператор hi := s, так как идентификатор hi нельзя использовать в теле процедуры в качестве простой переменной. Программа, которая печатает таблицу значений суммы 1 + + 1/2 + ... + Mm для т = 1, 2, 4, 1024, может теперь быть составлена следующим образом: Та же задача может быть решена и с помощью другой программы, в которой используется процедура-функция fsigma, описывающая процесс вычисления суммы в общем виде (для произвольного общего члена): Заслуживает внимания следующий пример использования функции fsigma. Для вычисления значения квадратичной формы п п t= 1 / = i с заданными коэффициентами а U, /] при известных значениях переменных л: [У], х [п] можно обратиться к функции fsigma с помощью указателя функции, составляющего правую часть следующего оператора присваивания: у := fsigma (/, /, п, fsigma (/, /, ft, а [г, /] х xf7] х *[/]))
|