Читайте также:
|
|
Подпрограмма-функция предназначена для вычисления какого-либо параметра. Функция состоит из заголовка и тела функции.
Заголовок функции имеет вид:
FUNCTION <ИМЯ> (СПИСОК ФОРМАЛЬНЫХ ПАРАМЕТРОВ):<ТИП>;
где FUNCTION - служебное слово; ИМЯ - имя процедуры, определяемое в соответствии с общими правилами построения идентификаторов; СПИСОК ФОРМАЛЬНЫХ ПАРАМЕТРОВ - перечень имен для обозначения исходных данных и результатов работы процедуры с указанием их типов.
Допускается описание функции, не содержащее <СПИСКА ФОРМАЛЬНЫХ ПАРАМЕТРОВ>: PROCEDURE < ИМЯ >:<ТИП>;
в этом случае параметры в функцию передаются через систему глобальных параметров.
У этой подпрограммы два основных отличия от процедуры. Первое отличие - заголовок. Он состоит из слова Function, за которым следует имя функции, затем в круглых скобках - список формальных параметров, затем через двоеточие записывается тип функции, т.е. тип возвращаемого параметра. Функция может возвращать типы вещественные, порядковые, строкового и любого указателя.
Второе отличие в том, что процедура может иметь несколько выходных параметров-результатов, а функция только одно значение, передаваемое через ее имя. Именно этим объясняется то, что в теле функции хотя бы один раз имени функции должно присваиваться вычисленное значение.
Структура функции такая же, как и процедуры.
Пример. Функция вычисления тангенса tan(x) от аргумента х.
Function Tan(х: real): real;
Var tangens: real;
BEGIN
tangens:= Sin(x)/Cos(x); tan:= tangens;
END;
Для вызова функции из основной программы или другой подпрограммы следует в выражении, где необходимо использовать значение функции, указать имя функции со списком фактических параметров, которые должны совпадать по количеству и типам с формальными параметрами функции. Например, надо вычислить, оператор присваивания будет
Y:=Tan(x)/(1+Sqr(Tan(x));
28. Обмен информацией между функцией и вызывающей программой: понятие входных параметров, их описание, особенности технологии возврата результата.
Для обмена информацией между процедурами и функциями и другими блоками программы существует механизм входных и выходных параметров. Входными параметрами называют величины, передающиеся из вызывающего блока в подпрограмму (исходные данные для подпрограммы), а выходными - передающиеся из подрограммы в вызывающий блок (результаты работы подпрограммы).
В стандарте языка Паскаль передача параметров может производиться двумя способами - по значению и по ссылке. Параметры, передаваемые по значению, называют параметрами-значениями, передаваемые по ссылке - параметрами-переменными. Последние отличаются тем, что в заголовке процедуры (функции) перед ними ставится служебное слово var.
При первом способе (передача по значению) значения фактических параметров копируются в соответствующие формальные параметры. При изменении этих значений в ходе выполнения процедуры (функции) исходные данные (фактические параметры) измениться не могут. Поэтому таким способом передают данные только из вызывающего блока в подпрограмму (т.е. входные параметры). При этом в качестве фактических параметров можно использовать и константы, и переменные, и выражения.
При втором способе (передача по ссылке) все изменения, происходящие в теле процедуры (функции) с формальными параметрами, приводят к немедленным аналогичным изменениям соответствующих им фактических параметров. Изменения происходят с переменными вызывающего блока, поэтому по ссылке передаются выходные параметры. При вызове соответствующие им фактические параметры могут быть только переменными.
Выбор способа передачи параметров при создании процедуры (функции) происходит в соответствии со сказанным выше: входные параметры нужно передавать по значению, а выходные - по ссылке. Практически это сводится к расстановке в заголовке процедуры (функции) описателя var при всех параметрах, которые обозначают результат работы подпрограммы. Однако, в связи с тем, что функция возвращает только один результат, в ее заголовке использовать параметры-переменные не рекомендуется.
Дата добавления: 2014-12-19; просмотров: 101 | Поможем написать вашу работу | Нарушение авторских прав |