nextupprevious
Next:2.2.8 Упражнения Up:2.2 Выражения, операторы и функции
Previous:2.2.6 Общий вид Zonnon-программ


2.2.7 Определяемые функции

Как уже говорилось в п. 2.2.6, язык Zonnon допускает использование определяемых программистом функций. Каждая такая функция должна быть определена с помощью соответствующего описания. В простейшем виде это описание (см. рис. 2.12) состоит из заголовка функции, в котором указывается имя функции, список формальных параметров и тип  результата функции, и заключенного в операторные скобки (begin и end) оператора задания значения функции, который состоит из зарезервированного слова return и выражения, описывающего правила вычисления значения функции.

FunctionDeclaration = FunctionHeading ";"  begin  return  Expression  end SimpleName.

FunctionHeading = procedure  ProcedureName "(" [ FPSection { ";" FPSection } ] "):" TypeName.

FPSection = ident { "," ident } ":" TypeName.

Рис. 2.12. Простой вид описания функции

Например, по программе, вычисляющей площадь треугольника по формуле Герона,

module ПлошадьТреугольника1;
    var A,B,C : real;
begin
    read(A,B,C);
    write('Площадь =' , Sqrt((A+B+C)/2 $*$ ((A+B+C)/2 - A)$*$ ((A+B+C)/2 - B) $*$ ((A+B+C)/2 - C)))
end ПлошадьТреугольника1.

за счет использования функции $Р$P с пустым списком параметров для вычисления полупериметра треугольника можно получить более короткую программу

module ПлошадьТреугольника2;
    var A,B,C : real;
    procedure P(): real;
        begin return (A+B+C)/2 end P;
begin
    read(A,B,C);
    write('Площадь =' , Sqrt(P()$*$(P() - A)$*$(P() - B) $*$ (P() - C)))
endПлошадьТреугольника2.

Список формальных параметров представляет аргументы описываемой функции. В нем для каждого аргумента функции указываются формальный параметр (идентификатор), представляющий данный аргумент в операторе задания значения функции и изображающий разные значения при разных вызовах, а также имя типа значения, которое представляется этим параметром. Эти значения задаются при каждом обращении к функции с помощью списка фактических параметров (выражений), длина которого должна совпадать с длиной списка формальных параметров. Между формальными и фактическими параметрами устанавливается простое позиционное соответствие: первый фактический параметр соответствует первому формальному, второй -- второму и т.д. Приведенная ниже программа осуществляет вычисление площади выпуклого четырехугольника, заданного длинами четырех сторон (переменные A, B, C и D) и диагонали (переменная E$Е$).

module ПлощадьЧетырехугольника;
    var A,B,C,D,E : real;
    function P(X, Y, Z : real) : real;
        begin return (X+Y+Z)/2 end P;
    function S(X, Y, Z, W : real) : real;
        begin return Sqrt(W$*$(W-X)$*$(W-Y)$*$(W-Z)) end S;
begin
    read(A,B,C,D,E);
    write(' Площадь =', S(A,B,E,P(A,B,E))+S(C,D,E,P(C,D,E)))
end ПлощадьЧетырехугольника.

В ней функции $S$ и P служат для вычисления площадей треугольников по формуле Герона более эффективным способом, чем это описано в предыдущих двух программах.

Next:2.2.8 Упражнения Up:2.2 Выражения, операторы и функции
Previous:2.2.6 Общий вид Zonnon-программ


© В.Н. Касьянов, Е.В.Касьянова, 2004