|
Горбачев Л.И. Основы программирования в среде Turbo Pascal.
[НАЗАД] [ДАЛЕЕ]
![](ln.gif)
2. Функции.
Другой вид подпрограмм в языке Турбо Паскаль - функции. Функция
оформляется аналогично процедуре и отличается от нее по структуре только
заголовком, общий вид которого такой:
function
имя[(формальные_параметры)]: тип_результата;
Пример: Function Proverka(X, Y, I: integer): real; Function Logic: boolean;
Отличительные особенности функции следующие:
- функция имеет только один результат выполнения (но может иметь несколько
входных параметров). Возвращаемый результат функции может иметь любой скалярный
тип, тип string и тип "указатель";
- результат обозначается именем функции. Имя функции может входить в выражение
как операнд. Поэтому в разделе операторов (при описании функции) обязательно
должен присутствовать оператор присваивания, в левой части которого стоит имя
этой функции;
- в заголовке функции обязательно должен быть указан тип возвращаемого
значения функции;
- вызов функции в основной программе осуществляется непосредственно внутри
выражения по ее имени с указанием фактических параметров.
Тело функции представляет собой локальный блок, по структуре
аналогичной программе: function имя
[(формальные_параметры)]: тип_результата; <разделы_описаний> begin <раздел_операторов> end;
В разделе операторов должен находиться хотя бы один оператор,
присваивающий идентификатору функции значение. Если таких присваиваний
несколько, то результатом выполнения функции будет значение последнего оператора
присваивания.
Обращение к функции осуществляется по имени с необязательным
указанием списка фактических параметров. Каждый фактический параметр должен
соответствовать формальным параметрам, указанным в заголовке, и иметь тот же
тип.
Вызов функции может осуществляться в выражении в виде обозначения
функции, например: ........ Y := Func(10); { вызов
функции Func, вычисленное значение функции хранится в переменной Y
} ........
или иначе: WriteLn('Значение функции ', Func(10));
Функции могут возвращать значения целочисленных, вещественных,
булевских, символьных, строковых, ссылочных, перечислимых пользовательских
типов.
Пример: Программа нахождения частного от деления двух чисел с
использованием процедуры и функции. В программе DoRatio используется
процедура ввода двух чисел и функция, определяющая отношение этих чисел. [program
DoRatio]
Пример: Программа вычисления скорости падения тела за первые
10 секунд полета с шагом 0.5 секунд. [program Speed]
2.1. Рекурсия.
Рекурсивным называется объект, частично состоящий или определяемый с
помощью самого себя. Функция или процедура может вызывать другую функцию или
процедуру, та, в свою очередь, третью, и т.д. Допустимо также, чтобы функция или
процедура вызывала сама себя. Такой способ вызова носит название рекурсии, а
функция или процедура называется рекурсивной. Необходимо добавить, что рекурсия
должна быть конечной.
Не следует избегать использования рекурсий. Это полезный прием
программирования. Использование рекурсии позволяет проводить в жизнь любимую
программистами стратегию "разделяй и властвуй".
Пример: Программа
вычисления факториала числа с применением рекурсии. Выход из программы - ввод
любого числа меньше 0 или больше 20. Факториал числа N определяется как
произведение целых чисел от 1 до N и обозначается N!. N!=1*2*3*...*(N-1)*N.
Приведенное выражение можно переписать так:
N!=N*((N-1)*(N-2)*...*3*2*1)=N*(N-1)!. [program
Factorial]
Пример: Программа вычисления факториала числа с
применением рекурсии. Выход из программы - ввод любого числа меньше 0 или больше
600. Программа, аналогичная предыдущей. Однако значительно расширен диапазон
вычисления факториала за счет использования опций компилятора {$E+},
{$N+}. {$N+} - Глобальная область действия. Режим генерации операторов для
обработки вещественных чисел: 1) без использования сопроцессора -
{$N-}; 2) с использованием сопроцессора - {$N+}. {$E+} - Глобальная
область действия. Режим подсоединения из системной библиотеки модулей,
эмулирующих работу с числами с плавающей точкой. Требует наличия опции
{$N+}. [program
Factor1]
Пример: Программа, использующая рекурсивную функцию,
предназначенную для вычисления наибольшего общего делителя двух положительных
целых чисел. [program NOD]
![](ln.gif)
[НАЗАД] [ДАЛЕЕ]
|
![](black.gif)
![](black.gif)
![](white.gif)
![](black.gif) |