Функция: туда и обратно

Итак, в функцию при ее вызове должны попасть какие-то значения. Например, в основной программе написано:

a:=StrToFloat(Edit2.Text);

b := Tan(a);

Чтобы значение переменой a оказалось в функции, ее заголовок должен выглядеть следующим образом:

FUNCTION Tan(x: REAL):REAL;

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

Все переменные, описанные внутри функции или процедуры, являются ЛОКАЛЬНЫМИ. Это значит, что они никак не связаны с одноименными переменными, описанными в других частях программы. Например:

IMPLEMENTATION

VAR a: REAL; { глобальная переменная а }

FUNCTION abc(a:REAL):REAL; { локальная переменная а }

BEGIN

END;

 

В примере в начале всей программы выделяется память под ГЛОБАЛЬНУЮ переменную с именем a. Глобальные переменные можно использовать в любом месте в тексте программы. Они постоянно занимают память. Большое количество глобальных переменных – признак низкой квалификации программиста.

Переменная a, описанная в заголовке функции abc, существует только внутри этой функции. Она никак не связана с глобальной переменной a, это две разные ячейки памяти. Внутри функции глобальная переменная a будет не видна, возможен доступ только к локальной переменной a.

В момент вызова функции Tan значение, записанное в скобках после ее имени, будет занесено в локальную переменную a. Например:

x := Tan(2*b+pi);

Сначала вычисляется выражение 2*b+pi, а затем начинает выполняться функция и полученное при вычислении значение заносится в ее локальную переменную а.

В процедурах и функциях могут быть и обычные локальные переменные, типы данных и константы:

 

FUNCTION abc(a:REAL):REAL;

TYPE TA=ARRAY[1..10] OF REAL;

VAR x:REAL;

BEGIN

END;

 

В приведенном примере в переменную a заносится значение при вызове функции, а переменная x является просто ячейкой памяти. Она никак не связана с другими переменными с именем x, описанными в других местах программы. Аналогично тип данных TA в примере действует (обычно говорят "виден") только до конца текста функции, т.е. до слова END.

После того, как в функции вычислено возвращаемое значение, самое главное – не забыть на самом деле вернуть его. Для возврата значения внутри функции всегда существует переменная с именем Result, а также с именем, совпадающем с именем самой функции. Например, внутри функции Tan живет переменная с именем Tan и типом REAL и переменная Result тоже типа Real (напомним, что тип возвращаемого значения указывается после заголовка функции). Этой-то переменной и нужно присвоить результат вычислений:

 

FUNCTION Tan(a:REAL):REAL;

BEGIN

Result:=SIN(a)/COS(a)

END;

 

Очень часто встречается следующая ошибка:

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

 








Дата добавления: 2015-03-19; просмотров: 822;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.