2361
.pdfПЕЧАТЬ |
Рис. 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;
ELSE (оператор 2);
Во всех этих случаях иногда бывает не ясно какому then относится, то или иное ELSE
На самом деле надо иметь ввиду, что else всегда относится к ближайшему IF слева.
Рассмотрим конкретный пример.
Пусть требуется протабулировать следующую значение разрывную функцию:
|
|
ax, если 0 |
x |
7; |
|
У = |
|
bx2 , если 7 |
x |
12; |
|
|
|
|
|
|
|
|
|
cx3 , если 12 |
x |
20; |
|
|
|
dx4 , если 15 |
x |
20; |
|
где а = |
3,7 |
;1 |
|
|
|
|
|
10 |
|
|
|
|
b= 0,15; |
|
|
|
|
|
с=1,2; |
|
|
|
|
|
d= |
0,2 |
. 2 |
|
|
|
|
10 |
|
|
|
|
|
|
x 1, |
При |
этом, |
шаг |
изменения |
аргумента |
интервал изменения аргу-мента: 0 х 20. |
|
|||
Структурная |
схема |
алгоритма табулирования |
||
разрывной функции приведена на рис. 4.2.2 |
|
Начало
Ввод а,в,с,d
Ввод аргумента
Х
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Нет |
|
|
|
|
|
|
|
||
|
|
|
Да |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
Х< 7 |
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
Да |
|
|
|
|
|
Нет |
|
|
|
|
||||
|
У= a*x |
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
Х 12 |
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Y = a*x2 |
|
|
|
|
|
|
|
|
|
Х 12 |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
У= bx3 |
|
|
|
|
|
Y= dx4 |
20
Вывод х,у
Конец
Рис.4.2.2. Структурная схема алгоритма табулирования разрывной функции.
Один из вариантов программы (согласно структурной схеме рис.4.2.2.) может выглядеть:
Program_funс; Const
а=3.7e-1; b=0.15; с=1.2; d=0.2e-2;
Var
x: integer; y:real;
Begin
read(x); If_x<7_then_y:=a x_else
If_x<=12_then_y:=b sqr(x)_ else If_x<=15_then_y:=c exp(3 ln(x))_ else If_x<=20_then_y:=d exp(3 ln(x))_ else;
Writeln (´x=´, x:2, ´y=´, y);
End.
ОПЕРАТОР ВАРИАНТА CASE
Данный оператор относится к группе переходных операторов (if, goto). Дело в том, что часто вместо оператора if удобно использовать оператор варианта или выбора, который в общем виде можно представить (неполная форма):
Case (селектор) of
Метка 1: оператор 1 ; Метка 2 : оператор 2 ;
.
.
.
Метка n : оператор n ;
End;
Здесь:
Case – выбор ;
Of – из ;
End – конец оператора case.
(Поэтому в программе с использованием case, на один оператор end, будет больше);
(селектор) - математическое выражение целого типа, либо переменная целого типа.
Метка – целое число, стоящее перед оператором и отделѐнное от него двоеточием.
т.е метки – целые числа, значения которых принимают селекторы.
Таким образом, до выполнения CASE селектор должен иметь какое-то целое число и тогда компьютер переходит к выполнению оператора, числовое значение метки которого совпадает с числовым значение селектора.
Рассмотрим конкретную программу для вычисления одной из площадей различных геометрических фигур по выбору:
|
ab, |
|
|
если n=1 |
|||
|
|
|
|
|
|||
|
|
ah |
|
, |
|
если n=2 |
|
|
2 |
|
|
||||
|
|
|
|
|
|
||
S |
|
(ab)h |
, |
если n=3 |
|||
2 |
|
|
|||||
|
|
|
|
||||
|
|
|
|
2 |
|
если n=4 |
|
|
|
|
|
r |
, |
||
|
|
|
|
|
|
||
|
|
|
|
R |
2 |
если n=5 |
|
|
|
|
|
|
|||
|
|
|
|
|
, |
|
|
|
360 |
|
|||||
|
|
|
|||||
Здесь а=3.2, h=2.4, |
=27.4,; |
||||||
b=7.8* |
10 1, |
3.14 |
pi, r=4.2; |
Значение селектора n необходимо вводить вручную (с клавиатуры) с помощью оператора READ.
Вариант программы следующий:
Program_geom; Label
1,2,3,4,5; Const
a=3.2; b=7.8e-1; h=2.4; f=27.4; r=4.2;
Var
S: real;
n: integer; Begin
Read (n);
Case_n_of 1:S:=a*b; 2:S:=a*h/2;
3:S:=h*a*b/2; Оператор выбора
4:S:=pi*r*r;
5:S:=pi*(r*r)*f/360;
end;
Write (‗S=‘,S);
End.
В данной программе при реализации необходимо с клавиатуры ввести одну из цифр от 1 до 5.
Если набрана цифра больше 5, то компьютер выходит из программы без выдачи результатов и сообщения об ошибках.