ПЕЧАТЬ |
Рис. 4.2.6. Структурная |
схема |
|
Z |
алгоритма возведения в |
степень. |
|
КОНЕЦ
Вход в процедуру
y:=0
i=i(1)…n
y:= y*x
Выход из процедуры
с переменной (y)
Рис. 4.2.7. Структурная схема процедуры.
Данным структурным схемам алгоритма соответствует следующий вариант программы:
Program_step4;
Var
m:integer; a, z,:real;
Procedure_step1 (n:integer; x:real; var y:real); Var
i:integer; Begin
y:=1; for_I:=1_to_n_do y:=y*x;
end;
Begin
Read (a, m);
if_m:=0_then_z:=1; else_if_m>0_then_step1 (m, a, z);
else_step1 (-m, 1a , z);
Write (z); End.
В данной программе обращение к процедуре step1 дважды осуществлено с помощью оператора if.
При этом, в процедуре произойдет замена формальных параметров n, x, y на фактические m, a, z. В
другом случае - n, x, y на m, 1a , z и затем в головную программу осуществляется возврат и процедуры с результатом z, который в процедуре выступает как y.
Составить второй вариант программы, используя процедуру step2 без параметров (глобальные параметры или переменные).
Program_step5;
Var
n:integer;
x,y:real;
Procedure_step2; Var
i:integer; Begin
y:=1; for_i:=1_to_n_do y:=y*x;
end;
Begin Read(n, x);
if_n:=0_then_y:=1 else if_n>0_then_step2 else;
Begin
n=-n;
x:= 1x ; step2;
End; Write (y); End.
В данном варианте программы оператор вызова процедуры осуществляет только ее вызов. Исходные данные передаются в процедуру каждый раз с помощью переменных n и x, описанных и определенных в теле
головной программы, содержащей обращение к этой процедуре с помощью глобальных (общих) переменных. Аналогично, через глобальные переменные y передаются в головную программу результата работы процедуры step2.
В связи с выше изложенным уместно сделать некоторые дополнительные разъяснения.
Дело в том, что понятия глобальных и локальных переменных введено в языке PASCAL из-за наличия в нем понятия блочной структуры, т.е. любая программа, процедура и функция представляют собой блок со своей областью описаний и могут содержать внутри этого блока описания других процедур и функций, а также обращения к ним. Таким образом, программа в целом и совокупность нескольких описанных в ней процедур и функций образуют блочную структуру. Блок, содержащий в своем разделе описаний другой блок (процедуру или функцию), называется внешним по отношению к нему. Блок же, содержащийся в разделе описаний некоторого блока, называется внутренним или
подблоком.
Объекты, описанные внутри какого-либо подблока, являются по отношению к нему локальными
инедоступными внешним блокам, т.е. на них можно ссылаться только внутри блока, в котором они описаны.
Для пояснения сказанного приведем следующий рис., на котором изображена абстрактная структура какой-то усложненной программы, состоящей из трех блоков.
Из такой структуры следует, что переменные i, j
иk являются локальными по отношению к блоку 3 и недоступны в
блоках 1 и 2. Переменные x, y, z доступны в блоках 2, 3
инедоступны в блоке 1, т.к. по отношению к блоку 3
они являются глобальными. Переменные a, b, c доступны во всей программе и во всех процедурах, т.к.
являются глобальными по отношению |
к |
|
блокам 2,3. |
|
|
|
Существуют и более сложные блочные |
|
|
|
|
структуры. |
|
|
|
Program_abc1; |
Блок 1 |
|
Var |
|
|
a, b, c:real; |
|
Procedure_abc2; |
Участок программы |
Блок 2 |
|||
Var |
|
|
|
|
|
|
x, y, z:real; |
|
|
|
|
выполнить (да) |
|
Условие (if) |
не выполнить |
||
|
Procedure_abc3; |
|
Блок 3 |
||
(нет) |
Var |
|
|
|
|
|
i, j, k:real; |
|
|
|
|
|
Begin |
|
|
|
Операт |
Оператор 1 |
|
|
|
||
|
… |
|
|
|
(после |
(после then) |
|
|
|
||
|
End; |
|
|
|
|
Begin |
|
|
|
|
|
|
… |
|
|
|
|
End; |
Продолжение программы |
||||
|
|
||||
Рис.4.2.1. Структурная схема работы оператора IF. |
|||||
Begin |
|
|
|
|
|
|
… |
|
|
|
|
|
Из этой схемы видно, что выполняется либо |
||||
End. |
|
|
|
|
|
левый участок программы, а правый игнорируется, либо |
|||||
наоборот. Вполне возможны и такие формы данного |
|||||
Рис. 4.2.8. Блок – схема структуры, головная |
|||||
оператора. |
|
|
|
|
|
программа – процедуры. |
|
|
|||
|
IF <условие 1> THEN |
|
|
||
|
BEGIN |
|
|
|
|
|
|
IF (условие 2) THEN (оператор 1) |
|||
END;