- •7.1. Необходимость структуризации в программировании
- •7.2. Подпрограммы в языке паскаль
- •7.2.1. Стандартные библиотечные модули
- •7.2.2. Встроенные функции и процедуры
- •7.3. Процедуры и функции пользователя
- •7.3.1. Процедуры
- •7.3,2. Функции
- •7.3.3. Механизм передачи параметров
- •7.3.4. Область действия параметров
- •7.3.5. Рекурсии
- •7.3.6. Нетрадиционное использование подпрограмм
7.3,2. Функции
Функция, определенная пользователем, состоит из заголовка и тела функции. Заголовок содержит зарезервированное слово function, идентификатор (имя) функ ции, заключенный в круглые скобки, необязательный список формальных парамет ров и тип возвращаемого функцией значения. Тело функции представляет собой локальный блок, по структуре аналогичный программе: .,
В разделе операторов должен находиться, по крайней мере, один оператор, присваивающий имени функции значение. В точку вызова возвращается результат последнего присваивания.
Обращение к функции осуществляется по имени с необязательным указанием списка аргументов. Каждый аргумент должен соответствовать формальным параметрам, указанным в заголовке, и иметь тот же тип. В качестве примера приведем программу вычисления выражения Z=(A5+A~3)/2*A^ в которой возведение в степень выполняется функцией Step.
В начале программы описываются переменная целого типа М и переменные вещественного типа A, Z, R, после этого описывается функция вычисления степени числа Step с формальными параметрами N и X, результат, возвращаемый функцией в точку вызова, — вещественного типа.
В описании функции вводятся две локальных (местных) переменных I и Y. Переменная I служит для подсчета числа повторений цикла, а в Y накапливается значение степени как произведения N одинаковых сомножителей. В заключение функции Step присваивается значение вычисленного произведения.
В начале выполнения основной программы на экран выводится запрос "Введите значение числа А и показатель степени М" и считывается с клавиатуры значение вещественного числа А и целого числа М.
Затем выполняется оператор Z:=Step(5,A). Вначале осуществляется вызов функции Step с передачей ей фактических параметров 5, А. Их значения присваиваются формальным параметрам функции N и X. По окончании вычисления степени числа значение функции Step, вычисленное для фактических параметров 5 и А. присваивается переменной Z. Аналогично в операторе Z := Z + Step(3,l/A) сначала осуществляется вызов функции Step с передачей ей фактических параметров 3. 1/А, после чего значение переменной Z увеличивается на величину возвращенного в основную программу результата вычисления функции Step.
Оператор ifM=0 then R:=l else if M>0 then R:=Step(M,A) else R:=Step(— M,A) проверяет условия М=0, М>0 и в зависимости от их соблюдения либо присваивает переменной R значение 1 (при М=0), либо выполняет вызов функции Step для фактических значений М, А или —М, А, а после вычисления значения функции
Step присваивает его переменной R. Оператор Z:=Z/(2*R) выполняет вычисление значения выражения Z/(2*R), а затем присваивает вычисленное значение переменной Z.
В заключение программы стандартная процедура Writeln выводит на экран сообщение о результате вычислений степени М числа А.
Упражнение 2. Запустите интегрированную среду программирования. Введите текст программы DemoFunc и запишите файл на диск под соответствующим именем, а затем откомпилируйте его. После того как компиляция выполнится успешно, задайте для просмотра в окне отладчика величины А, М, I, Y, Step, Z, R. Установите видимыми одновременно окна редактора с текстом программы и окно просмотра. Исполните программу в пошаговом режиме с заходом в функцию и пронаблюдайте за изменениями значений переменных в основной программе и в подпрограмме-функции, обратите внимание на передачу значений при вызове функции от фактических параметров основной программы формальным параметрам функции и возврат вычисленного функцией значения в основную программу.