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

книги из ГПНТБ / Соловейчик, Р. Э. Программирование на АЛГОЛ-60 учеб. пособие

.pdf
Скачиваний:
26
Добавлен:
19.10.2023
Размер:
3.78 Mб
Скачать

30

Естественным обобщением условного оператора является полный условный оператор, который имеет приводимую ниже общую форму

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

 

Значительно удобнее выглядит оператор цикла в том случае, ког­

Соседние файлы в папке книги из ГПНТБ