Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsia_15_Podprogrammy_Protsedury_Funktsii_Re....docx
Скачиваний:
7
Добавлен:
25.09.2019
Размер:
25.4 Кб
Скачать

Функции

     Описание функции состоит из заголовка и блока. Заголовок содержит ключевое слово function, имя функции, необязательный список формальных параметров, заключенный в круглые скобки, и тип значения, возвращаемого функцией. Формат описания функции:

     function <Имя > [(формальные параметры)]:<тип результата>;

     <разделы описаний>

      begin

          <раздел операторов>

       end ;

     Возвращаемое значение может иметь любой тип, кроме файлового.

     Блок функции представляет собой локальный блок, по структуре аналогич­ный блоку процедуры. В теле функции должен быть хотя бы один оператор присваивания, в левой части которого стоит имя функции. Именно он и определяет значение, возвращаемое функцией. Если таких операторов не­сколько, то результатом выполнения функции будет значение последнего оператора присваивания. В этих операторах вместо имени функции можно указывать переменную result , которая создается в качестве синонима для имени функции. В отличие от имени функции, переменную result можно использовать в выражениях блока функции. С помощью переменной result можно в любой момент получить внутри блока доступ к текущему значению функции.

     Замечание. Имя функции можно использовать в выражениях блока функции, однако эти приводит к рекурсивному вызову функции самой себя.

     Вызов функции осуществляется по ее имени с указанием в круглых скобках списка аргументов, которого может и не быть. Аргументы должны соответствовать формальным параметрам, указанным в заголовке при описании функции, и иметь те же типы. В отличие от процедуры, имя функции может входить как операнд в выражения.

     Пример .

                    Program Two;

                    var x, y, z, z1, z2: real; . . .

                    function Gamma(a, b: real): real;

                    begin

                       Gamma := sqrt(a*a + b*b);

                    end;

                   Begin

                      . . .

                      z:=Gamma(1.5, 3.48 );

                      writeln (‘z=’, z:5:3);

                     . . .

                    z1:=Gamma( 0.16, 2.8);

                    . . .

                    writeln (sin(Gamma(0.1, 0.2)):6:4);

                    . . .

                End .

Рекурсивные подпрограммы

     В ряде случаев требуется, чтобы подпрограмма вызывала сама себя. Такой способ вызова называется рекурсией. Рекурсия полезна в тех случаях, когда основную задачу можно разделить на подзадачи, каждая из которых реализуется по алгоритму, совпадающему с основным.

     Пример . Вычисление факториала .

                     function Fact(n: integer): integer;

                     begin

                        if n<=0 then Fact:=1 else Fact:=n*Fact(n-1);

                    end ;

Параметры и аргументы

     Параметры являются элементами подпрограммы и используются при описании ее алгоритма. Аргументыуказываются при вызове подпрограммы и замещают параметры при выполнении подпрограммы. Параметры могут быть любого типа, включая структурированный. Существуют следующие виды параметров:

  • значение;

  • константа;

  • переменная;

  • нетипизированная константа и переменная.

     Группа параметров, перед которыми в заголовке подпрограммы отсутствуют слова var или const и за которыми следует указание их типа, называются параметрами-значе-ниями. Например, и являются параметрами-значениями в следующем описании: Procedure P1 ( a : real ; b : integer );

     Параметр-значение обрабатывается как локальная по отношению к под­программе переменная. В подпрограмме значения таких параметров можно изменять, однако эти изменения не влияют на значения соответствующих им аргументов, которые при выполнении подпрограммы были подставлены вместо фактических параметров-значений.

     Группа параметров, перед которыми в заголовке подпрограммы стоит слове const и за которыми следует описание их типа, называются параметрами-константами. Например, в описании procedure P2 (const x, y: integer;); x и y являются параметрами-константами. В теле подпрограммы значение параметра-константы изменить нельзя. Те параметры, изменение которых в подпрограмме нежелательно и должно быть запрещено, можно оформить как параметры-константы. Кроме того, для параметров-констант строковых и структурных типов компилятор создает более эффективный код.

     Группа параметров, перед которыми в заголовке подпрограммы стоит слово var и за которыми следует описание их типа, называются параметрами-переменными. Например, параметрами-переменными являются и f в сле­дующем описании: function F1(var d, f: real; q: integer ) : real ;

     Параметр-переменная используется в случаях, когда значение должно быть передано из подпрограммы в вызывающий блок . В этом случае при вызове подпрограммы параметр-переменная замещается аргументом, и любые из­менения формального параметра отражаются на аргументе. Таким способом можно вернуть результаты из подпрограммы по окончанию ее работы.

     Для параметров-констант и параметров-переменных можно не указывать их тип, в этом случае они считаютсянетипизированными. Подставляемые на их место аргументы могут быть любого типа, и программист должен самостоя­тельно интерпретировать типы параметров в теле подпрограммы. Примером задания нетипизированных параметров-констант и параметров-переменных является следующее описание: function F2(var e1; const t2): integer ;

     Отметим, что группы параметров в описании подпрограммы разделяются точкой с запятой.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]