
книги из ГПНТБ / Соловейчик, Р. Э. Программирование на АЛГОЛ-60 учеб. пособие
.pdf30
Естественным обобщением условного оператора является полный условный оператор, который имеет приводимую ниже общую форму
if отношение then. else S2
где s1 - любой оператор, но только не условный,Р Зг - лю бой оператор (без всяких ограничений).
В отличие от условного оператора, полный условный опера тор работает не только тогда, когда отношение истинно, но и тогда, когда оно ложно , причем он.прямо указывает, какой оператор должен выполняться в этом случае. Так, в приведенной общей форме полного условного оператора при истинности отно шения выполняется оператор 3i , а оператор 32 пропус кается; если же отношение ложно, то пропускается оператор
, а выполняется оператор зг . Далее в обоих случаях управление передается тому оператору, который стоит после s2 (если, конечно, ни S-r , ни з2 не содержат в себе опе ратора перехода). Стоит подчеркнуть, что как условный, так и полный условный операторы могут быть использованы при реше
нии многих задач. Поясним это на следующем |
примере. Пусть |
|||||||
где-то в |
программе необходимо выполнить следующее: |
|||||||
если |
t = п-1 |
, то |
положить о |
- * 2 |
и продолжить вычисле |
|||
ния; |
если же |
t^n-i |
, то |
передать управление оператору |
||||
с меткой |
special |
. Заметим, |
что решение |
этого примера не |
единственное; здесь приводится один вариант его решения с использованием условного оператора и два варианта - с исполь зованием полного условного оператора:
1) if |
t |
^ |
n-1 |
then jo to_special; |
D: ^ |
x t |
2 |
; |
|||
2 ) if |
t |
s |
r.-1 |
then D |
: = |
xf2 else |
go |
to |
speciel . |
||
3 ) i f |
t |
/ |
n-1 |
then go |
to |
special |
else |
B |
; |
= |
x f 2 ; |
Все приведенные операторы решают поставленную задачу, и все эти решения равноценны.
Как уже указывалось в простом условном4операторе после
31
then |
может стоять любой'оператор, кроме условного. В пол |
|||
ном условном операторе |
это относится только к |
оператору, стоя |
||
щему после then , а |
оператор, стоящий после |
else |
, мо |
жет быть любым, в том числе и условным и полным условным. Получается как бы вложение условных операторов.
Рассмотрим сначала вложение условного оператора в пол ный условный оператор
if R, then 31 else if Rg then Sg . 3^ ;
Действие этой конструкции заключается в том, что просматрива
ются все отношения слева направо; если найдено истинное от |
|
|||
ношение, то выполняется следующей за ним безусловный опера |
|
|||
тор, а остальные условные операторы пропускаются; если же |
|
|||
все отношения ложны, то весь оператор пропускается и выпол |
|
|||
няется следующий оператор (в нашем примере - |
оператор |
). |
||
Приведем блок-схему для случая вложения условного опера |
||||
тора, в полный условный оператор |
|
|
|
|
i f R1 |
t hen 3| e ls e i f Rg |
then Sg ; |
3 Л j |
|
Теперь рассмотрим вложение полного условного оператора в полный условный оператор:
if R1 then Si else if Rg then З2 else З3 ; Зд ;
Действие этой конструкции заключается в том, что просматрива ются все отношения слева направо; если найдено истинное от ношение, то выполняется следующий за ним безусловный опера-
—32 -
тор, а остальные условные операторы пропускаются; если все отношения ложны, то выполняется оператор, следующий за пос
ледним |
е1ае |
. Блок-схема для этого случая имеет вид |
||
if |
then |
31 else if Но then Sp else |
S^j |
3^ ; |
Проиллюстрируем применение этих конструкций следующим приме ром. Пусть где-то в программе нужно предусмотреть выполнение
ряда требований: |
|
|
|
|
|
|
|
||
1. |
Если |
а< ъ |
, то положить |
g |
равным 9,8 и про |
||||
должить счет (перейти к пункту 4). |
|
|
|
|
|||||
2. |
Если |
оС-/5>- |
14,7 |
, то положить J> - |
c °s -g - ,а |
||||
<5-> = 7 _ Г 1*^и продолжить счет (перейти к пункту 4). |
|||||||||
3. Если ни одно из предыдущих указаний не выполнено, |
|||||||||
то передать управление оператору с меткой |
unusual |
||||||||
4. |
После |
выполнения указаний |
I и |
2 положить |
flag |
||||
равным I. |
|
|
|
|
|
|
|
|
|
Все это может быть записано |
следующим образом, при |
||||||||
условии естественного обозначения идентификаторов: |
|||||||||
if |
s < b |
then |
g : = |
9.S |
else |
|
|
|
|
if |
alpha |
- bets ^ |
14 •7 |
then |
|
|
|
|
|
|
begin rhoi |
= сэз |
(theta 42); |
|
|
|
|||
|
|
sigma s=7- taut 1.5 |
emd. |
|
|
|
else go to unusual • flag : = 1 ;
—зз
Следует подчеркнуть, что это, конечно, не программа, а неко торый ее внутренний фрагмент.
Условие
Естественным является использование конструкции, очень схожей с полным условным оператором для записи различных ус ловий, Большей частью эта конструкция используется совместно
с оператором присваивания. |
|
|
|
|
|
|
|||
Например, если нужно положить величину |
signal |
равной |
|||||||
нулю при |
w = е |
и равной единице при |
v |
4 |
z |
, то это |
|||
можно сделать хотя бы так |
|
|
|
|
|
|
|||
signal I = |
if |
w = z |
then 0 |
else t |
j |
|
|
|
|
Этот пример можно решить и с помощью построения полного |
|||||||||
условного оператора |
|
|
|
|
|
|
|
||
if w |
= z |
then |
signal |
: * О |
else signal |
t |
= 1 |
t |
но этот способ не рекомендуется, так как он приводит к не экономной работе машины.
Допустим, нужно написать на языке МГ0Л-60 формулу
у |
0,5 х |
+0,93, |
если |
х |
2,1 |
|
0,7 х |
+ 0,53, |
если |
х > |
2,1 |
||
|
||||||
Она будет иметь следующий вид: |
|
|
|
|||
Y ! я I f х < ? . 1 then |
0,5 х х +С.95 e ls e 0.7 |
* х *■ 0.53 ; |
Приведем еще один пример. Допустим, нужно написать выражение, изображающее величину несобственного интеграла,
названного нами Q |
, |
|
|
|
|
|
|
,если |
а< о |
; |
|
Q |
О |
.если |
а |
= |
0; |
о/ |
Ж |
,если |
а |
> |
0; |
при этом будем считать, что переменной а уже црисвоено значение одним из предыдущих операторов присваивания, но само зто значение нам неизвестно
Q 1 = If |
а< 0 |
then |
-I.570B elgc |
If |
а = 0 |
then |
0 else 1.5708 ; |
Наконец, условие бывает очень удобно для выполнения условной передачи управления. Например, в некоторой программе мы хотим
передать управление оператору с меткой |
done |
.если абсолют |
|||
ная величина разности мезду |
х в |
final |
меньше 1СГ®, и опе |
||
ратору с меткой more |
в противном случае, то |
это можно |
|||
сделать с помощью оператора |
|
|
|
|
|
go to If вЪа (х - final )< |
Ю- '’ |
then |
done else |
more ; |
Булевские выражения
С простейшим видом булевских выражений, а именно с отно шениями, мы ухе познакомились. Булевские выражения почти ана логичны арифметическим. Напомним, что арифметические выраже
ния строятся из чисел, переменных и функций в комбинации с арифметическими операциями и круглыми скобками.
Булевские выражения строятся совершенно аналогично из ло гических значений true и f a l s e , булевских переменных,
булевских фунт 1ий и отношений в- комбинации с арифметическими
и логическими операциями и круглыми скобками.
Логические операции определяются'своими таблицами истин ности, введение которых не входит в предмет М Г О Л -SO, а состав ляет часть курса математической логики. Там определены следую щие пять логических операций и установлены символы для них:•
отрицание - конъюкция - дизъюнкция - импликация - тождество -
"7 (не) ; Л ( и) ;
V(или);
О(влечет);
=(эквивалентно).
35
Эти операции полностью определяются приводимой таблицей истин ности.
p |
q |
ПР |
р М |
pVq |
PDq |
p=q |
и |
и |
л |
и |
и |
И |
и |
и |
л |
л |
л |
и |
л |
л |
л |
и |
и |
|
л и |
и |
л |
л |
л |
и |
л |
I |
и |
и |
В,,этой таблице И - означает "истинно" или true ,
Л - "ложно" или false.
Если в состав логического выражения, наряду с логически ми операциями, входят арифметические, то порядок их выполне ния при просмотре слева направо устанавливается следующей таб лицей старшинства операций.
Порядок
I 2 3 4
Операция
|
t |
+ |
— |
V V |
А А II |
Порядок Операции
51
6А
7V
80
9=
Операция считается старшей по порядку, если ее порядок меньше. Поясним использование этого правила примерами.
Пусть ухе выполнены операторы присваивания
В: = tru e ; Р; = false ; Gi = tru e . Hi * true ;
R: = 2 ; |
. a i = 12 ; , |
T : = 0; |
®s =-20 |
36
причем первые четыре переменные описаны как булевские, а вто рые четыре - как действительные.
Вычислим результат выполнения следующих операторов при сваивания:
Ъ : = F |
|
дает |
L |
= |
f a l s e |
||
М ! = 3 ^ 1 |
|
|
м а f a l se |
||||
N |
s |
= Н/Ш-$Г 25 |
|
|
N |
= |
true |
0 |
г |
= П FVR •» 3 |
= Т |
|
0 |
3 |
true |
Р 1 = G S T + 1 2 > U |
|
р |
= f a l s e |
||||
Q |
: = EVPDR = |
Т |
|
Q |
= |
f a l s e |
После |
|
того, как мы оцределили булевское выражение, вернемся |
|
|||||||||
к рассмотрению условия. Приведенные выше примеры показывают |
, |
|||||||||||
что условие - это |
конструкция вида |
|
|
|
|
|
|
|||||
|
|
|
|
if |
отношение |
then |
|
|
|
|
|
|
которой можно дать |
более общую трактовку |
|
|
|
|
|
||||||
|
|
|
If |
булевское выражение |
then |
|
|
|||||
Если, |
|
например, нужно прекратить вычисление, как только |
g |
и |
||||||||
h |
станут меньше 0,001 по абсолютной величине,то это можно |
|
||||||||||
сделать с помощью оператора |
|
|
|
|
|
|
|
|||||
if еЪэ |
(к)< 0.001 A |
abs(h )< 0.001 |
then g o |
to |
M |
; |
|
|
||||
Надо |
заметить, |
что В конструкции |
if |
...then |
|
... else |
|
|||||
слово |
|
elae иногда не обязательно, |
а иногда необходимо. Здесь |
|||||||||
действует правило: |
в операторе, начинающемся со слова |
ir |
, |
|||||||||
слово |
е!яв |
не обязательно, в условном же |
выражении, |
стоя |
||||||||
щем в арифметическом выражении или в операторе |
перехода, |
ело- |
37
•' во e ls e |
|
необходимо (попутно мы расширили определение арифме |
||||||||
тического выражения,, тем что в него могут входить условия). |
||||||||||
Следовательно, |
конструкции |
|
|
|
||||||
i f |
а |
= |
б |
then |
ys = 2 |
; |
|
|
|
|
j f |
Ъ |
= |
0 |
then |
z: = |
0 |
e ls e |
g : |
= 9 |
; |
являются допустимыми, в то время как конструкция |
||||||||||
g: |
= |
|
i f |
с = 1 |
then |
|
x f 2 |
• |
|
|
недопустима; правильной будет конструкция |
||||||||||
gs |
= |
i f |
с = 1 |
then |
х 1 2 |
e ls e |
2 - |
х t 3 ; |
Приведем пример программы, осуществляющей расчет таблицы зна чений функции, задаваемой так называемой разветвляющейся фор мулой.
' |
|
|
|
|
|
|
|
|
17000 |
- 0,485 |
В 2 |
, если |
R |
< 120 ; |
|||
3 = < |
■ Д § 0 Щ — |
|
, |
если |
в |
> |
120 |
|
I |
I + |
з £ — |
|
|
|
|
|
|
|
|
18000 |
|
|
|
|
|
|
для значений |
R |
от |
20 до 200 с шагом 5. |
В таких случаях |
||||
часто употребляется условная запись |
|
|
|
|||||
|
|
R |
= 20 |
(5) |
200 , |
|
|
|
но нужно иметь в виду, что к АЛГОЛ-60 она никакого отношения
не имеет. |
|
|
|
|
|
Для |
решения этой |
задачи |
необходимо цредусматр* - |
вать организацию цикла по |
R |
. Для этого нужно положить |
||
R. = |
20 и |
обеспечить счет по формуле, а затем увеличить зна |
||
чения |
R |
на шаг и проверить на окончание. Если новое зна |
||
чение |
н |
окажется больше 200, |
то вычисления прекращаются, |
в противном случае счет -продолжается. .
Нике приводится блок-схема этой программы
—38
Эта блок-схема реализуется, например, |
следующей программой: |
|||
begin real |
R, |
3 |
j |
|
R : = 20 ; |
|
|||
againj 3i= if |
R<120 |
then |
Г7СОО-0.485 * Rt 2 |
|
else |
1 3 0 0 0 /(1+Rf2 /1 8000)( |
|||
t |
|
|
|
|
печать |
(R,S) |
; |
|
|
If R"Jf200 |
then |
atop |
f |
|
R i = |
R |
+ 5 |
? |
|
go to |
again |
end |
|
—39
При обсуждении плана составления программы было употреблено слово "цикл" в расчете на его понятность, но теперь все же дадим строгое определение. Цикл в программе - это многократно повторяемый участок этой программы.
Оператор цикла
' Как правило, цри построении программ приходится всегда сталкиваться с тем, что в них многократно повторяются те или иные участки программы, т.е. с тем, что эти программы цикли ческие. Для подобных вычислений в АЛГОЛ-60 есть специальный и очень удобный аппарат - оператор цикла. Общая форма такого оператора имеет следующий вид:
fог < переменная > : = < список цикла > do < оператор>
Список цикла состоит из одного или нескольких элементов списка цикла, являющихся в простейшем случае арифметическими выраже ниями (в частности, переменными или числами).
Основная идея оператора цикла состоит в многократном вы полнении оператора, стоящего после do в соответствии со значениями, принимаемыми переменной. Если под управлением дан ного оператора цикла повторно выполняются несколько операто ров, то они-должны быть объединены в один составной оператор,
т.е. должны быть заключены в операторные скобки |
begin и end. |
||||||
|
Рассмотрим пример использования общей формы оператора |
||||||
цикла. Пусть требуется вычислить значение выражения |
|||||||
|
|
у = х 3 - a3 in (а2 * х 2) |
|
||||
для |
х |
= -20;-1,2;^",7;2,4;5,9 |
и напечатать соответствую |
||||
щее |
значения |
х и |
у . |
|
|
||
|
а |
for |
х: = -20, |
—‘1,2, 1.7, |
2.4,‘ 5.9 do |
|
|
|
|
begin у| |
= |
xt3 -at 3/3 > In (at 2 + xt2 |
) T |
||
|
|
|
|
печать (x, y) |
end |
|
Значительно удобнее выглядит оператор цикла в том случае, ког