Вопросы для самопроверки

Глобальные и локальные объекты

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

Внутри подпрограммы могут быть описаны свои собственные константы, типы данных и переменные. Такие элементы называют локальными. Локальные элементы могут использоваться только в той подпрограмме, в которой они определены, а также в процедурах и функциях, которые определены внутри нее. Они не существуют до тех пор, пока подпрограмма, в которой они описаны, не вызвана, а также после завершения ее работы.

Пример: области видимости переменных 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. Что понимают под глобальными и локальными объектами?