Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Ответы на экзаменационные билеты_2 / Структура программы. Локализация объектов

.txt
Скачиваний:
15
Добавлен:
28.06.2014
Размер:
3.21 Кб
Скачать
Программа на языке Паскаль имеет блочную структуру:
<программа>::=<заголовок><блок> (не пугать с сегмент-блоком!)
<описание процедуры>::=<заголовок><блок>
<блок>::=<раздел описаний ><составной оператор>
В программный блок могут быть вложены процедурные блоки, в которые, в свою очередь, могут быть вложены блоки других процедур, и т.д.
Любой объект должен быть описан в каком-либо блоке. Говорят, что объект локализован в том блоке, где он описан. Это значит, что он существует в этом блоке и перестает существовать за пределами этого блока.
Если объект используется вне того блока, где он описан, то он называется нелокальным.
Нелокальный объект называется стандартным, если он определен в самом языке. Например, константы Pi, Maxint, функции Ео? Sin - стандартные.
Если нелокальный объект описан в программе, то он называется глобаль­ным.
ПРИМЕР.
program R;
var a,i:real;
procedure P1;
var b:real;
procedure P2;
var x,i:real;
begin
i:=2
begin
end{P2};
i:=99; P2;
writeln(i); {99}
end{P1};
function F:real;
var Z:real;
begin
i:=0; F:=i;
end{F};
begin
P1; writeln(i); {99}
writeln(i+F); {99+0=0(?)}
writeln(F+i); {0+0=0}
end{R}.
Переменные a, i - локализованы в программе R; b - локализована в процедуре Р1; х - локализована в процедуре Р2 и т.д.
Переменную а можно использовать в любой процедуре программы R, так как она глобальна по отношению к этим процедурам.
Переменная b - локальна в процедуре Р1 и глобальна по отношению к про­цедуре Р2, поэтому в этих процедурах она может быть использована. Переменную b нельзя использовать функцией F и в программе R, так как она теряет свое зна­чение при выходе из процедуры Р1.
Переменная z можег быть использована только функцией F, где она описа­на.
Если некоторая переменная (i) описана и во внешнем блоке (R) и во внут­реннем (Р2), то во внутреннем блоке действует описание его локальной перемен­ной i. Значение глобальной переменной i при входе в процедуру Р2 автоматиче­ски сохраняется, а при выходе из этой процедуры - восстанавливается.
Те же правила локализации распространяются и на любые другие объекты, в том числе и на процедуры.
Процедура Р1 и функция F описаны в программе R, поэтому они могут вызываться из программы R. Проце­дура Р2 описана (а значит и локализована) в процедуре Р1, следовательно она может вызываться из процедуры Р1 и может вызывать Р1 как глобальную.
В то же время, невозможно обратиться из программы R и из функции F к процедуре Р2, так как Р2 является локальным объектом процедуры Р1.
При взаимодействии Р1 и F действует следующее правило языка Паскаль: описание объекта должно предшествовать его вызову. Поэтому F может вы­зывать Р1, а Р1 не может вызывать F, так как процедура Р1 описана раньше, чем функция F, Чтобы установить равноправие P1 и F, следует перед описанием про­цедуры Р1 добавить опережающее описание функции F:
function F:real;forward;
ЛОКАЛИЗАЦИЯ ПЕРЕМЕННЫХ:
1) R вызывает:
P1 - доступно, P2 - недоступно, F - доступно;
2) P1 вызывает:
Р1 - рекурсия, Р2 - доступно, F - недоступно;
3) Р2 вызывает:
Р1 - доступно, Р2 - рекурсия, F - недоступно;
4) F вызывает:
Р1 - доступно, Р2 - недоступно, F - рекурсия.