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

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

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

20

присвоено в последний раз. т.е. перед вычислением значения, определяемого арифметическим-выражением.

Остановимся на некоторых особенностях и правилах, приме­ няемых при вычислении значения, определяемого арифметическим

выражением.

 

 

 

 

 

а)

В

МГОЛ-60 запрещается написание подряд двух зна­

ков арифметических операций. Так,

нельзя писать А* ~ в

, но

можно писать

А* (-в) и А/в

.

Поскольку знаки

"+" и

неразличимы со знаками сложения

и вычитания, то вто пра­

вило означает

также,

что выражение для показателя степени, на­

чинающееся со

знака,

должно быть заключено в круглые скобки.

 

Поэтому нельзя писать Аф-в

, но можно АТ (— Е),лф в

и

-АТв.

б) В АЛГОЛ-60 при отсутствии скобок операции в преде­ лах одного арифметического выражения выполняются^вообще гово­ р у слева направо, но при этом сначала производится возведение в степень, затем умножение и деление и, наконец, сложение и вычитание. В соответствии с этим правилом выражения

А х В + C /D - Е X p t G И ( А * н ) + ( C / D ) - ( В х ( P t G) )

эквивалентны.

В тех случаях, когда нужная последовательность действия не подчиняется этому правилу, надо использовать круглые скоб­ ки.

Приведем примеры записи на АЛГОЛ-60 некоторых класси­

чески записанных выражений.

 

 

Математическая запись

Запись на АЛГОЛ-60

 

( х + у ) ф 3

 

х + у ф 3

 

А /

В х

с

А

А /

(3 X-

с)

21 ~

 

 

 

(x/IO)

f (2 X i

+1 )

(т т Н 2 * 1

(х/10)Т 2 v* i +

1

( z2) k

2 f

k

 

a(’k>

2 f (

2 f k )

 

Стоит подчеркнуть, что в последних двух примерах имеются толь­ ко операции возведения в степень, и поэтому они выполняются слева направо' при условии отсутствия скобок.

Остановимся кратко на определении типа арифметического выражения. Для операций сложения, вычитания и умножения ре­ зультат будет целого типа, если оба операнда целого типа, в противном случае результат будет действительного типа. Для

операции деления результат всегда будет действительного типа,

 

операции целочисленного деления,

которая оцределена только

m

операндов целого типа, результат

всегда будет целого типа,

операция имеет специальное назначение и состоит в нахожде­

нии целой части частного от деления двух целых чисел; дробная часть частного отбрасывается. Операция возведения в степень приводит к результатам различного типа в зависимости от вели­ чины и типа основания и показателя. Обозначим число целого

типа через

i

, число действительного типа через г

и чис­

ло произвольного типа через

а

. Тогда

 

 

a * а* . .л а

( i раз)

, если

i> 0 ; тип тот же,

что у а;

I

 

 

, если

i=One^ojTHn тот же, что

 

 

 

у е

 

 

 

at Ц не определено

 

, если

± = о и а =

о ;

1/(8 *

я *... * е) (iраз).если

К о и а / о

{действительный;

не определено

 

, если 1< о и е = о

;

22

rlna

,если

а>

0

; действительный;

е

0.0

,если

а

=0 и

г> 0

;действительный;

не определено

.если

а =0 и

г « о

;

не определено

.если

а < 0

 

 

Стандартные функции

В АЛГОЛ-60 имеется всего девять стандартных функций, за которыми закреплены стандартные индентификаторы. Аргументом этих функций является значение некоторого арифметического вы­ ражения, обозначаемого в ; оно всегда пишется в скобках. Идентификаторы стандартных функций и смысл самих стандартных функций поясняются следующим образом:

вЪа (Е)

 

-

абсолютная величина значения

е

5

 

 

 

 

+1,если

Е> 0

 

 

 

 

sign (Е)

=

* О.если

е

-

знак значения Е

 

 

 

 

-1,если

Е < 0

 

 

 

 

sgrt

(е )

-

корень квадратный из значения

Е

;

aln

(Е)

 

-

синус значения Е [

^

* g L 5 T. BHI"

cos

(Е)

 

-

косинус значения в ]

erctan

(Е)

-

главное значение арктангенса величины в ,

 

 

 

 

выраженное в радианах;

 

 

 

In (Е)

 

-

натуральный логарифм значения'

Е

;

ехр

СВ)

 

-

показательная функция значения

Е

;

entier

(В)

-

наибольшее целое число, не превосходящее зна­

 

 

 

 

чения в

 

 

 

 

 

Оператор присваивания

Оператор в АЛГОЛ-60 - это приказ о выполнении какого-ни­ будь действия. Как будет видно в дальнейшем, программа на

23 -•

МГ0Л-60 построена из ряда операторов различного типа, включая и такие операторы, которые определяют последовательность выполз нения других операторов. Начнем рассмотрение с оператора ггрис“ ваивания, работа которого заключается в присвоении значения одной или нескольким переменным. Простой оператор присваивания имеет следующий вид:

переменная : = выражение .

Это не равенство! Такая запись означает, что значение пере­ менной, стоящей слеза, заменяется значением выражения, стоя­ щего справа.

Приведем несколько примеров операторов присваивания и

подробно поясним их работу:

 

г I = 3

-

заменить настоящее

значение (т.е. то

 

 

значение, которое она имела к этому

 

 

моменту) переменной

ж на значение

 

 

3 ;

 

omega s=theta

*6 ,2 8 3 2 -

заменить настоящее

значение перемен­

 

ной

omega

на значение

theta

+

 

+6.283

, при

этом используется, зна­

 

чение переменной theta

, присво­

 

енное ей к данному моменту;

 

aeriv:=N у cos(eng)f(N-x)- заменить настоящее значение пере­

 

 

м е н н о ^ ^ eriv

на значение

 

 

N СОВ

1 (eng)

, при этом исполь­

 

зуются значения переменных Н ж ang,

 

присвоенные им к данному моменту;

 

k : a i - 1

_ заменить настоящее значение к

на

 

его настоящее значение, уменьшенное

 

на

единицу.

 

 

 

 

Подчеркнем, что всем переменным,

входящим в правую часть

оператора присваивания, должны быть уже присвоены определен­ ные значения цредыдущими операторами^

В некоторых случаях мы сталкиваемся с тем, что перемен-

24

ная, стоящая слева, имеет тип, отличный от типа, который име­ ет переменная , стоящая справа. В этом случае определяющим является тип переменной, стоящей слева , т.е. происходит из­ менение типа у значения переменной, стоящей справа, при этом иногда применяется округление.

Приведем некоторые обычные формулы и соответствующие им операторы присваивания, при этом идентификаторы переменных выбраны так, чтобы указать на смысл исходной переменной, но это, конечно, не обязательно

R з

А. »

Вх

 

 

0 +

Ю

 

 

ji

=

т гт -

+

- Г &

,

V

 

х 2

-

Y2

 

 

х

 

 

2

 

у

 

х

 

■¥

Х*-

 

0=

 

 

 

 

г 1г ?

к,

 

1 . 1 1 2 -------- —

 

 

 

 

Г1 - г 2

 

J = 4к - 61с, к 2 ,

к

= 12

 

,

 

 

J T =

3.1415927

,

1= _-| р 1п (а * Ьв

Ы„СЙ =М *•

2J ,

 

 

-It:= ( А+ В х х ; / (C-f-В ”

г )

;

Betai=

-1 /

( 2 *

r H A t 2 / ( 4 *

х ? 2 ) f

Ру: =х я ( x f 2 - Y t 2 ) /( x t 2 + r f 2 ) ;

 

 

 

 

 

1

 

 

Ci

 

=1.112

* r i

« r2 / ( r l - r 2 ) *

к j

J

i

i 4 < - k - 6

 

;

 

к

:

=

12

,

 

 

 

p is

=

3 Л415927

j

 

 

Ii=

- l / ( e x p ) x

l n f s + l ) »

e x p ( p x x ) ) .

Гнев = 1

+ 1 »

I

:

=

I

1

{

тнеа =

"ТСЛ

»

T

;

=

n

=*

I .

 

 

 

 

 

 

т

-

т?

»

I

s

=

1 1 2 .

 

•СЛ1

 

 

 

 

 

 

У s в т о ^ е '(.е ва ^ Ь ) .

V

i

= ercta n (ex p ( m * x ) * s o r t(a /h ))

25

Как видно из приведенных примеров, написание операторов прис­ ваивания в АДГ0Л-60, как правило, не вызывает трудностей, но все же приведем несколько примеров их ошибочного написания и отметим допущенные ошибки.

X! =

2х +А'

3 . 1 4 :=

х - а

gamaa«= 1? 6 ? 8 , 982+d e l t a .

а 1* х # 2 + Ъ* х + с • = О

-ш j = if 4

as =((х + у)а f 2 + (R - S)/I6 .8

-опущен знак умножения;

-слева должна стоять перемен­ ная;

-запятая в константах запре­ щена;

-слева может стбять только одиночная переменная, а не выражение;

-переменная слева должна быть написана без знака;

-количество открывающих и закрывающих скобок неодина­ ково; пропущен знак умножения,

Элементы организации программы

Программа на МГОЛ-бО в основном состоит из операторов, т.е. приказов на выполнение некоторых действий. -Операторы программы выполняются в естественном порядке до тех пор, по­ ка не встретится приказ, изменяющий этот порядок. Последо­ вательность выполнения операторов может нарушаться несколь­ кими способами, в том числе:

оператором перехода, указывающим в явном виде тот опера­ тор, который должен выполняться следующим;

условным оператором, позволяющим выполнять операторы в той или иной последовательности в зависимости от заданных величин или полученных результатов.

26

Вследствие возможности передачи управления, т.е. выпол­ нения операторов не в естественном порядке, а также по другим причинам, необходимо.точно указывать, где кончается каждый оператор. Для этого после окончания каждого оператора ставит­ ся Или точка'с запятой, или слово snd_ , или слово else . Использование каждой из этих возможностей обусловлено цравилами, которые будут изложены ниже. Сейчас заметим только, что наиболее часто употребляется точка с запятой. Во многих слу­ чаях возникает необходимость рассматривать группу операторов как один оператор. В таком случае используются так называемые

операторные скобки - слова

begin

и

end

. Перед группой

ставится слово

Begin

, а после нее -

слово

 

end_

. Вся

эта группа будет называться составным оператором.

Заметим,

 

что перед словом

end

- можно не ставить точки

с запятой.

 

Внешне очень похожа на составной оператор конструкция

 

блока. Блок также заключен в операторные

скобки

Begin

и

 

end

, но в него входят не только операторы,

но и описания,

 

которые

следуют

сразу за словом besin

. Существуют различ­

ные описания, но во всех случаях каждая переменная должна

 

быть описана как имеющая тип real

,

integer

или

 

 

Boolean

(вещественный,

целый или

булевский). Каждая про­

грамма должна быть блоком, т.е. начинаться со

слова begin

.

затем должны быть помещены описания, после них - операторы и

 

заканчиваться программа должна словом

 

. Из дальней­

 

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

 

четко устанавливает ее границы, но и на самом деле дает нам

 

гораздо больше.

 

 

 

 

 

 

 

 

 

Метки и операторы перехода

В программе часто приходится сталкиваться с необходи­ мостью того, чтобы некоторые операторы были как-то обозначе­ ны. Для этого в АЛГОЛ-60 употребляются метки, являющиеся .как' бы идентификаторами операторов. Метка - это любое целое число без знака или любой идентификатор. За меткой всегда ставится двоеточие, чтобы отделить ее от оператора, перед которым она

27

написана. Как правило, использование меток чаще всего связано

с оператором

перехода,

общий вид

которого

go to ъ

, где

Ь

- метка

оператора,

стоящего

где либо

в программе.

Этот

оператор показывает, что следующим должен выполняться не оче­ редной оператор, а оператор с меткой ъ

Приведем пример использования оператора перехода. Цредположим, что требуется вычислить силу переменного тока в электрической цепи, которая имеет сопротивления, емкость и индуктивность. В случае установившегося режима зависимость силы тока от остальных параметров дается формулой

 

 

 

 

 

д

 

______

 

 

 

1 "

 

V f o с г ^ р ь -

1

) ?

 

 

где

I

-

сила тока, а;

2 ]Г РС

 

- соп­

б

- напряжение, в;

r

ротивление,

ом;

ь

- индуктивность, гн ;

о

- емкость,

ф ;

р

-

частота,

гц .

 

 

 

 

 

Допустим нас интересует

зависимость между силой тока и

частотой при неизменных значениях напряжения, соцротивления, индуктивности и емкости. Эти значения вводятся с помощью пер­ фокарт или перфоленты. Также последовательно вводятся интере­ сующие нас значения частоты и для каждого из них вычисляется сила тока и печатаются результаты. Эта задача может быть реа­ лизована следующей программой:

beg in r e a l

Е, R,

L, С, Р, I

;

 

 

ВВОД (Б, Ft, L,C ) ;

 

 

 

печать (б, л , ъ , с);

 

м :

ВВОД

( Р )

,

I ;=Е/sqrt (RT2+(6.2832*P*b-1/(6. 2332*1?* С) Л 2) »

 

печать

(F,I); &о

to М

end.

Заметим, что обычно программа так на составляется; в ней не предусмотрена остановка машины - она "зависает", кроме того,

вней использованы русские буквы для слов "ввод" и "печать", что является недопустимым в языке АЛГОЛ-60, но это сделано

всвязи с тем, что операции ввода и печати не обусловлены в

этом языке, а только в его конкретных реализациях.

28

Условный оператор

Оператор go to дает возможность безусловной передачи управления, но часто возникает необходимость передачи управ­ ления в зависимости от выполнения некоторого условия. Эту возможность предоставляет оператор -i* . В этом операторе

используются

операции

отношения < ;

— > ^

У , ф ,

. а са­

мо отношение

имеет вид

. где

а, и

е 2 . - арифме­

тические выражения, a

R

- любая операция отношения. Отно­

шение понимается не как утверждение некоторого факта, а как предположение, которое может быть или истинным, или ложным. С помощью этих операций легко описать условный оператор. В простейшей форме он имеет вид

j_£ отношение then оператор ,

и действие его заключается в

следующем: если отношение истин­

но, то выполняется оператор,

стоящий после

then

; если же

отношение ложно, то оператор,

стоящий за

then

, не выпол­

няется и управление передается следующему зг Пш м оператору. Например, оператор

W х < ТО then go to delta

при

x < 10

передает управление оператору с меткой delta ,

в цротивном

случае, т.е. при

х > 10,

выполняется следую­

щий

оператор, не указанный нами явно.

 

 

Оператор, стоящий после

then

, может быть любым,

но только не условным. Часто он бывает составным оператором, как в следующем примере:

If F +

Ir.er

final

then

begin4F

г = F +

iner*

to go repeat end

Поясним, почему здесь важны операторные скобки. Если бы их здесь не было, то, пока отношение истинно, действие опера­

тора было бы правильным, но как

только отношение станет лож­

ным,

управление

передастся

оператору перехода, в

29 ■'

то время как цри наличии операторных скобок будут пропущены оба оператора, стоящие между ними,и управление будрт передано следующему оператору. Этот пример позволяет улучшить програм­ му для вычислений силы тока в зависимости от частоты, приве­ денную выше. С этой целью ше ст о самостоятельного ввода каж­ дого значения частоты, вводятся с самого начала три величины

начальная частота

in itia l

, шаг

iner

и наибольшая

частота final

• Тогда блок-схема задачи будет следующей:

а соответствующая программа примет вид

he£jn гея!

4,7?,L, С,Б1,X,

initial, iner, final j

ВВОД (4,4,■ I,,C,

Initial, iner, final ) .

печать

( E,

ч, x, c ) .

F

i =

initial

r

reneet: T; =E/sqrt

(Hf2 + (6 . W ?2 »P»L-1 / ( 6 .2832-F»0) )fg) ;

печать

( F,

I

);

 

ifp +

iner < final

then

стоп

*' : =F + iner;

go to repeat end ;

end

 

 

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