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; Казалось бы, результат измениться не должен, но после вычислений получим Локальные и глобальные переменные размещаются в оперативной памяти в различных сегментах (частях). При трансляции программы формируются: · сегмент кода, в котором хранится программа в виде машинных команд, · сегмент данных, в котором выделяется память под глобальные переменные, · сегмент стека, предназначенный для размещения локальных переменных:
Размер каждого сегмента не может превышать 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 Все права принадлежат авторам размещенных материалов.
|