ТОР 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 вопрос Не нашли, что искали? Воспользуйтесь поиском:
|