Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Для универа / Информатика / Uch_posobie_INFORMATIKA_2010isprav.doc
Скачиваний:
311
Добавлен:
15.02.2016
Размер:
13.32 Mб
Скачать

7.9. Функции и процедуры.

7.9.1. Функции

Для выполнения таких как возведение числа в квадрат, извлечение квадратного корня, определение модуля (абсолютной величины) числа, вычисление тригонометрических функций, округление дробного числа до ближайшего целого, определение длины строковой переменной и другие предусмотрены стандартные функции, которые являются неотъемлемой частью языка Паскаль.

Исходные данные называются аргументом функции, а вычисленный результат – ее значением. При обращении к функции аргумент указывается в круглых скобках.

К наиболее широко употребляемым стандартным функциям кроме уже известных нам функций length, ord и char, используемых для работы со строковыми переменными, относятся также следующие:

abs(x) – определяет aбсолютное значение аргумента, которым может быть число или выражение целого или вещественного типа;

arctan(x) – вычисляет арктангенс угла, значение которого выражено в радианах ;

cos(x) – вычисляет косинус угла, значение которого выражено в радианах;

exp(x) – вычисляет экспоненту аргумента (то есть e в степени x);

int(x) – определяет целую часть аргумента. Значением функции является величина вещественного типа;

ln(x) – вычисляет натуральный логарифм аргумента (т. е. логарифм по основанию e);

pi – данная функция не имеет параметров, а значением ее является число 3.1415926…

round(x) – округляет значение аргумента до ближайшего целого числа;

sin(x) - вычисляет cинус угла, значение которого выражено в радианах;

sqr(x) – вычисляет квадрат аргумента, которым может быть число или выражение целого или вещественного типа;

sqrt(x) – вычисляет квадратный корень из аргумента;

trunc(x) – определяет целую часть аргумента. Значением функции является величина целого типа;

copy(x,n,l) – выделяет в строковой переменной x группу символов, начиная с позиции с номером n. Длина группы равна l. Параметры n и l должны быть величинами целого типа;

delete(x,n,l) – удаляет из строковой переменной x группу символов, начиная с позиции с номером n. Количество символов равно l.

В качестве примера программы с использованием стандартных функций рассмотрим программу решения квадратного уравнения ax2+bx+c=0 (рис. 7.9.1).

В данной задаче вначале с помощью стандартной функции sqr вычисляется дискриминант уравнения. В зависимости от значения дискриминанта выясняется, имеет ли данное уравнение решение. Если решения нет, то соответствующее сообщение выводится на экран компьютера. В случае же, если решение имеется, оно определяется с помощью стандартной функции sqrt.

При значениях коэффициентов уравнения 2, 7 и 3 получаем решение, изображенное на рис. 7.9.1.

Рис. 7.9.1. Программа решения квадратного уравнения и результаты его решения.

Набор стандартных функций языка Паскаль не ограничивается вышеприведенным списком, однако в ряде случаев программисту может потребоваться для решения поставленной задачи создать свою собственную функцию. Такая функция должна быть описана в тексте программы после раздела описания констант и переменных и до начала ее основной части (то есть до слова begin).

Структура описания создаваемой программистом функции выглядит следующим образом:

 заголовок функции ;

 раздел описания констант и переменных, используемых внутри функции ;

begin

 операторы функции 

end;

Рассмотрим более подробно элементы этой структуры.

Общий вид заголовка функции следующий:

function  имя_функции  ( параметры функции ):  тип функции ;

где: function – служебное слово, означающее «функция».

 имя_функции  - задается по тем же правилам, что и имена переменных.

 параметры функции - в скобках указываются аргументы функции, называемые ее формальными параметрами, причем для каждого параметра обязательно должен быть указан его тип. Если параметры относятся к одному типу, то они перечисляются через запятую, а после двоеточия указывается их общий тип, если же параметры относятся к разным типам, то они отделяются друг от друга точкой с запятой.

 тип функции  - после скобок обязательно указывается тип значения самой функции.

Пример заголовка функции:

function beta (x,y:integer; z:real):real;

данная функция имеет имя beta, в ней используются 3 параметра: x и y – целого типа, z – вещественного. Значение самой функции beta является вещественным.

За заголовком функции следует описание переменных и констант, используемых в теле функции и называемых локальными переменными, так как они могут использоваться только в теле функции. Далее следует тело функции, которое является составным оператором, начинающимся словом begin и заканчивающимся словом end.

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

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

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

Например, правая часть оператора присваивания

d:=beta(3,4,7.5)

представляет собой обращение к функции beta, а 3, 4 и 7.5 – фактические параметры данной функции в отличие от формальных параметров х,y и z. В качестве фактических параметров функции могут выступать и константы (как в вышеприведенном примере) и переменные.

Рассмотрим программу определения числа сочетаний из n по m (см. рис. 7.9.2). Это число определяется по следующей формуле:

,

где n!, m! и (n-m)! – соответственно факториалы n, m и (n-m). Факториалом числа n называется произведение всех натуральных чисел от 1 до n. Так как в программе нам предстоит три раза вычислять факториал различных чисел, то целесообразно вычисление факториала оформить в виде отдельной функции faktor.

Рис.7.9.2. Программа подсчета числа сочетаний из n по m и результаты ее работы

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

В вычислении факториала используются следующие переменные: переменная k, которой присваивается значение того натурального числа, факториал которого вычисляется, переменная r, которой будет присвоено начальное значение, равное единице, а затем будут поочередно присваиваться значения факториалов всех чисел от единицы до k включительно, а также i – переменная цикла, в котором будут происходить это последовательные присваивания. Переменная k является формальным параметром функции, а переменные r и i являются вспомогательными. В теле функции имеется оператор присваивания конечного значения r имени функция faktor. Так как факториалы даже небольших натуральных чисел представляют собой достаточно большие величины (например, факториал числа 10 равен 3 628 800), то для описания типа функции используется тип longint.

В основной части программы осуществляется ввод исходных данных, затем производятся вычисления по формуле с использованием функции faktor. С помощью этой функции мы находим a –факториал числа n, b – факториал числа m и с – факториал разности этих чисел. Для вычисления этих величин в программе трижды производится обращение к функции faktor с различными фактическими параметрами. После нахождения a, b и c мы вычисляем d – искомое число сочетаний. На рис. 7.9.2 приведен результат работы программы при n = 5 и m = 3.