Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Локальные и глобальные переменные




Вложенные процедуры. Если блок какой-либо процедуры Р1 содержит внутри процедуру Р2, то говорят, что Р2 вложена в Р1.

Пример.

PROCEDURE P1(X: REAL; VAR Y: REAL);

VAR C: INTEGER;

PROCEDURE P2(VAR Z: REAL);

......................

END;

BEGIN

................

END;

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

Пример 2

PROCEDURE T1;

VAR Y1,Y2: REAL;

PROCEDURE SQ1;

VAR A,B,C,D: REAL;

BEGIN

(*Переменные A,B,C,D являются локальными для SQ1,

область их действия - процедура SQ1*)

.................

END;

BEGIN

(*Переменные Y1,Y2 -нелокальные переменные для SQ1 -

область их действия процедуры T1 и SQ1*)

.................

END;

Константы, переменные, типы, описанные в блоке PROGRAM, называют глобальными. Казалось бы, проще иметь дело вообще только с глобальными переменными, описав их всех в PROGRAM. Но использование локальных переменных позволяет системе лучше оптимизировать программы, делает их более наглядными и уменьшает вероятность появления ошибок.

Пример 3

PROGRAM T2; VAR K: INTEGER;

PROCEDURE A;

VAR X,Z: REAL;

BEGIN (*Начало А*)

(* Через X, Z обозначены две величины - локальные переменные для А;

К- глобальная переменная для А*)

:::::::..

END;(*Конец А*)

PROCEDURE В;

VAR X,Z: REAL;

BEGIN (*Начало В*)

(* Через X, Z обозначены две другие величины - локальные переменные для В;

К- глобальная переменная для В*)

.................

END;(*Конец В*)

BEGIN (*Начало работы PROGRAM T2*)

(*К - единственная переменная, которую можно использовать в Т2*)

..............

END.

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

Пример 4

PROGRAM T3;

VAR I: INTEGER; A: REAL;

Procedure P(VAR D: REAL);

VAR I: INTEGER;

BEGIN (*Начало Р*)

I:=3;

D:=I+10*D;

END;(*Конец Р*)

BEGIN

A:=2.0; I:=15; P(A); WRITELN (' I=',I,' A=',A)

END.

Глобальным переменным I и A отводятся две ячейки памяти. Первыми выполняются операторы А:=2.0 и I:=15. Затем вызывается процедура Р(А).

В процессе работы Р отводится ячейка для локальной переменной I и туда засылается число 3. После окончания работы процедуры Р эта ячейка I программой "забывается". После возврата на оператор WRITELN программа знает только одну ячейку I - глобальную, то есть ту, которая содержит число 15.

Поэтому программа T3 выдаст на печать I=15, A=23.0, так как А=3+10*2.

Если локальная и глобальная переменные принадлежит к одному и тому же сложному типу, то этот тип надо описать в разделе TYPE, а сами переменные описывать через этот общий тип.

Пример.

PROGRAM T1;

TYPE AB= ARRAY [1..3] OF REAL;

VAR A: AB;

PROCEDURE Q;

VAR B: AB;.......

END.

В этом примере переменные А и В описаны через общий тип АВ. Если же локальная и глобальная переменные описаны одинаково, но не через общий тип, то транслятор может "не понять", что эти переменные принадлежат одному типу.

5 вопрос






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных