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

Учебное пособие 1601

.pdf
Скачиваний:
5
Добавлен:
30.04.2022
Размер:
1.46 Mб
Скачать

ПЕЧАТЬ

Рис. 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, то компьютер выходит из программы без выдачи результатов и сообщения об ошибках.