Вопросы для самопроверки
Глобальные и локальные объекты
Константы, типы данных и переменные, объявленные в начале программы до описания любых процедур и функций, называют глобальными. Глобальные элементы существуют в памяти на протяжении всей работы программы и доступны как в самой программе, так и внутри всех ее подпрограмм.
Внутри подпрограммы могут быть описаны свои собственные константы, типы данных и переменные. Такие элементы называют локальными. Локальные элементы могут использоваться только в той подпрограмме, в которой они определены, а также в процедурах и функциях, которые определены внутри нее. Они не существуют до тех пор, пока подпрограмма, в которой они описаны, не вызвана, а также после завершения ее работы.
Пример: области видимости переменных t, x и y.
program primer;
var
t: boolean;
procedure A
var
x: integer;
procedure B;
var
y: real;
begin
{ здесь доступны переменные t, x и y }
end;
begin
{ здесь доступны переменные t и x }
end;
procedure C;
begin
{ здесь доступна только переменная t }
end;
begin
{ здесь доступна только переменная t }
end.
Значение глобальной переменной может быть изменено внутри любой из подпрограмм. Такой эффект иногда называют «побочным», и его использование является нежелательным, т.к. может привести к появлению непонятных ошибок в программе. Чтобы избежать такого эффекта, необходимо следить, чтобы внутри подпрограмм изменялись значения только локальных переменных и формальных параметров.
Пример: глобальная и локальная переменная
program primer;
var
global: integer;
procedure A;
var
local: integer;
begin
local:=5; { допустимо }
global:=10; { допустимо, но не желательно }
end;
begin
global:=7; { допустимо }
{ local:=3; - нельзя, т.к. это локальная переменная }
end.
Переменная global видна во всей программе, а local – только в процедуре A.
Допустима ситуация, когда имена локальных и глобальных переменных совпадают. В этом случае внутри подпрограммы локальная переменная «перекрывает» глобальную. К глобальной же переменной можно обратиться, приписав перед ее именем название программы:
<имя программы>.<имя переменной>
Пример: совпадение имен глобальной и локальной переменных
program primer;
var
test: real;
procedure AAA;
var
test: integer;
begin
test := primer.test ; { локальной переменной присваивается
значение глобальной }
end;
…
1. Что такое подпрограмма?
2. Чем отличается процедура от функции?
3. Что такое формальные параметры? Фактические параметры?
4. Чем отличаются параметры-переменные от параметров-значений?
5. Sqr – это функция или переменная?
6. Что понимают под глобальными и локальными объектами?