Головна сторінка Випадкова сторінка КАТЕГОРІЇ: АвтомобіліБіологіяБудівництвоВідпочинок і туризмГеографіяДім і садЕкологіяЕкономікаЕлектронікаІноземні мовиІнформатикаІншеІсторіяКультураЛітератураМатематикаМедицинаМеталлургіяМеханікаОсвітаОхорона праціПедагогікаПолітикаПравоПсихологіяРелігіяСоціологіяСпортФізикаФілософіяФінансиХімія |
Узагальнення, аналіз та інформація про проведення правової роботи та здійснення юридичного обслуговування в суб'єктах і господарюванняДата добавления: 2015-04-16; просмотров: 776
Структура программы. Локализация объектов. Программа на языке Паскаль имеет блочную структуру: <программа>::=<заголовок><блок> (не пугать с сегмент-блоком!) <описание процедуры>::=<заголовок><блок> <блок>::=<раздел описаний ><составной оператор> В программный блок могут быть вложены процедурные блоки, в которые, в свою очередь, могут быть вложены блоки других процедур, и т.д. Любой объект должен быть описан в каком-либо блоке. Говорят, что объект локализован в том блоке, где он описан. Это значит, что он существует в этом блоке и перестает существовать за пределами этого блока. Если объект используется вне того блока, где он описан, то он называется нелокальным. Нелокальный объект называется стандартным, если он определен в самом языке. Например, константы 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 - рекурсия. _____________________________________________________________________________________ |