Здавалка
Главная | Обратная связь

Function Summa(x, y: Real): Real;



Var s : Real;

Begin

s := x + y; эта функция ничего не вычисляет!

End;

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

Function Fact(n: Word): Word; n – формальный параметр

Var i, f : Word; i, f – локальные переменные

Begin эта функция вычисляет факториал

f:=1; заданного числа

For i:=1 To n Do

f := f * i;

Fact := f;

End;

8. если в функции используется цикл с параметром (цикл For), то параметр цикла должен быть описан внутри этой функции, то есть он должен быть обязательно локальной переменной (предыдущий пример),

9. связь вызывающей (головной) программы с функцией может осуществляться как через формальные и фактические, так и через глобальные параметры. Глобальные параметры (переменные) не описываются ни в заголовке функции, ни внутри ее. Они описываются в вызывающей программе и существуют как в ней, так и в любой функции, вызываемой из этой программы. Глобальные переменные могут изменять свои значения как в вызывающей программе, так и внутри функции:

Program Global;

Uses CRT;

Var a, b, c, s : Integer; с -глобальная переменная

Function Sum(x, y : Integer) : Integer;

Begin

c := c + 1; изменение значения глобальной

Sum := x + y + c; переменной в функции

End;

Begin

a := 1;

b := 1;

c := 1; инициализация глобальной переменной

s := c + Sum(a, b);

WriteLn(‘s=’, s);

ReadLn;

End.

После выполнения этой программы s = 5.

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

s := c + Sum(a, b);

и принимало значение s = 5. Поменяем местами слагаемые в этом операторе присваивания:

s := Sum(a, b) + c;

Казалось бы, результат измениться не должен, но после вычислений получим
s = 6 - значение глобальной переменной c изменилось внутри функции и стало равным с = 2, и с таким значением оно было добавлено в общую сумму в вызывающей программе.

Локальные и глобальные переменные размещаются в оперативной памяти в различных сегментах (частях). При трансляции программы формируются:

· сегмент кода, в котором хранится программа в виде машинных команд,

· сегмент данных, в котором выделяется память под глобальные переменные,

· сегмент стека, предназначенный для размещения локальных переменных:

 

 

Размер каждого сегмента не может превышать 64Кбайт. Адреса сегментов хранятся во время выполнения программы в сегментных регистрах:

CS – адрес сегмента кода,

DS – адрес сегмента данных,

SS – адрес сегмента стека.

В связи с размещением в различных сегментах памяти, глобальные и локальные переменные действуют по-разному:

· время жизни глобальных переменных – от начала работы программы до ее завершения,

· если глобальные переменные не были инициализированы явным образом, то есть им не были присвоены начальные значения, то перед началом работы программы они обнуляются,

· время жизни локальных переменных – с момента вызова подпрограммы и до ее окончания,

· значения локальных переменных между двумя вызовами одной и той же подпрограммы не сохраняются,

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

· если переменная внутри подпрограммы определена в разделе описания константConst , то память под нее выделяется не в сегменте стека, а в сегменте данных, причем начальное значение ей присваивается один раз до начала работы программы, а не при входе в подпрограмму:

Function Func(k: Word) : Word;

Const n: Word = 0; n – типизированная константа

Var i: Word;

Begin

WriteLn(‘i=’,i); неопределенное значение переменнойi

WriteLn(‘n=’,n);

n:= n + k;

Func:=n;

End;

Переменной i будет присвоено заранее неизвестное значение. При первом обращении к функции переменная n, определенная в CONST, будет равна нулю, и при каждом последующем обращении она будет увеличиваться на k.

· время жизни такой переменной – время работы всей программы: значения этой переменной сохраняются между вызовами подпрограммы,

· область действия такой переменной – подпрограмма, в которой она описана, то есть вне подпрограммы к этой переменной обратиться нельзя,

10. локальные и глобальные переменные могут совпадать по имени; в этом случае в функции работают локальные переменные,

11. в качестве формальных параметров функций можно использовать имена переменных любого типа, имена массивов, множеств, файлов, записей, комбинированных структур, а также имена ранее определенных функций;

в качестве формальных параметров функций нельзя использовать конкретные значения (числа, символы), элементы массивов, поля записей, выражения и стандартные функции,

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

13. значения входных (фактических) параметров функций не изменяются, даже если соответствующие им формальные параметры изменяются внутри функции; такие не изменяющиеся функцией входные переменные называются параметрами-значениями. При использовании параметров-значений в функцию передаются не сами фактические параметры, а их копии. Поэтому сами параметры остаются всегда неизменными:

Program Primer;

Uses CRT;







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.