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

книги из ГПНТБ / Мараева И.Б. Вычислительная техника в инженерных и экономических расчетах. Автокод Инженер для ЭЦВМ Минск-22 учеб. пособие

.pdf
Скачиваний:
3
Добавлен:
23.10.2023
Размер:
4.54 Mб
Скачать

50

§ б» Программирование разветвляющихся процессов

При реализации автокодовой программы после каждого опе­ ратора выполняется оператор, записанный в следующей строке программы» Однако такой естественный порядок выполнения опе­ раторов иногда нарушается. Ход вычислительного процесса из­ меняется в зависимости от получаемых при вычислении резуль­ татов или исходных данных. Например, знак числа, т .е . значе­ ние функции SL§ n (х ) > определяется по формуле

 

Г

- 1,

х < 0

y=sicjn(3c)=

I

а ,

х = 0

 

 

 

32 >0

В этом случае функции у

приписывается одно из 3-х возьеж -

ных значений в зависимости от заданного значения ос . Схема­ тично процесс вычисления функции у в этом примере изобра­ жен на ри с.З .

Рис.З

 

 

 

 

 

Процессы, в которых в зависимости от результата проверки

 

некоторого условия вычисление проводится го одноцу из

не­

 

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

 

дый из возможных путей вычисления -

ветвью

процесса. Не на­

 

до забывать, что в разветвляющейся

программе всегда исполь­

 

зуется только какая-нибудь одна ветвь ,

а другие ветви в

про­

 

цессе не участвуют.

 

 

 

 

 

Операторы, реализующие разветвление в

автокодовой

про­

 

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

н

 

безусловного перехода. Для программирования

разветвляющихся

 

процессов в АНИ используются операторы

ЕСЛИ

и ПЕРЕЙТИ

.

Оператор ЕСЛИ

Оператор если проверяет условие, записанное в его инфор­ мационной части и, в зависигости от того , выполняется оно шш нет, передает управление другим операторам. Условие обо-

 

 

 

 

51

значается

с помощью одного

из знаков

отношения

( » ( = »

) , ) =

» = » / =

(см .§

I ) .

Таким

образом

, слева от

знака отношения ставится прове­

ряемое арифметическое выражение, а справа через пробел - чи­ сло или переменная. Например,

ЕСЛИ _ ВХ’З - А ~ ( = 5 ^ . . .

После пробела пишется слово ТО, затем снова ставится про­ бел и далее указывается метка оператора, к которому перехо - дят, если проверяемое условие выполнено. Например,

ЕСЛИ ^ MOD(LN(X))^)B^T0^7E

Данная запись означает, что если I & x / p B

,то

управ­

ление передается оператору с меткой 7 .

 

 

Если проверяемое условие не выполняется, то

происходит

передача управления следующему по порядку оператору

автоко-

довой программы, который может быть и без метки.

 

 

Часто при решении конкретной задачи в случае

невыполне­

ния условия в операторе ЕСЛИ возникает необходимость переда­

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

ча управления достигается путем дополнения

оператора ЕСЛИ

словом ИНАЧЕ, вслед за которым после пробела

указывается

метка того оператора, которому передается управление. Напри­

мер, ЕСЛИ '

А

) 5

_ ТО _

3 _ i ША ,_,8Ж .

Рассмотрим

следующий пример.

Пусть требуется вычислить выражение

 

 

 

._________ хг+5________

 

 

 

 

У (а ?; = e t f r f '* * * ® * - - *

 

 

 

Очевидно, что показатель у экспоненты будет вещественным

числом,

если

 

sin x + eXH3+ x >0

, тогда у (х ) опреде-

ляется

обычным способом.

При

S in x +e X+G+х^О

показатель

экспоненты будет

чисто мнимым числом и вычисление

нужно ве ­

сти по формуле Эйлера

SLX= cosx + L sinx

, т .е .

отдельно

найти реальную и мнимую части функции

у (я )

> которые в дан­

ном случае будут

равны

/

х г+ 5

 

\

 

 

 

 

 

 

 

52

 

j ' m

y ( 3C y - - S t S i

 

 

 

 

x \ ) •

Программа дня этого

приора будет выглядеть так:

П р и м е р ^

 

I .

ВВО 1—j J l 1

 

 

ВЫЧ

_

Q=X’2 +5^R=SIN(XhEXPrX+A)*Х Л

 

Ш

_

/?_ (O^TO^S^ ИНА _ 7 К

5 .

ВЫЧ.

«

S =(M O£(R)yo,5^R£Y=COS(Q:3i.IMY=-SIN(Q

 

3)1

 

 

 

 

ЕАЛ— НА — sm s—

PEY,1MY Z

 

К Ш _

g

 

 

7,

ВЫЧ—

S = R ’ 0 ,5 ^ Y = g :S ^Y *E X P (Y )X

 

НАЛ— НА— БШ — Y S

 

КОЕ — Е

 

 

 

НАЧ -

Л

 

 

Схема решения этого

примера представлена на рис.4 .

По типу используемых величин оператор ЕСЛИ» как и опера­

тор ВЫЧИСЛИТЬ,

распадается на два: оператор ЕСЛИ—

для

ра­

боты с действительными величинами и оператор ЕСЛИ*.-

;

дан

работы с

величинами целого типа. Например,

 

 

ЕСЛИ —

: /V—

( = 5 .-. ТО— 31 I .

 

 

При использовании оператора ЕСЛИ в авто кодовой программе

 

 

 

 

 

 

 

53

для работы

машины в

режиме "Т"

кроме знаков

отношения

= , ( . (

=

, ) .

) =

можно записывать

я знак неравенства

/ = . Например,

ЕСЛИ^ :Д / _

/ = 5 - ,

Т 0 _ 10 К

Рассмотрим еще примеры.

 

 

 

П р и м е р ы .

 

 

 

 

 

I ) .

Составить

программу для нахождения

значения функции

 

 

{

1

если |/х+а

—j/ o c -a

=-0

Здесь а

- заданное

число.

Вычисления проводятся

в

том случае,

если корни имеют вещественные значения.

Если же

хотя бы один

корень - мнимое число,

машину следует

остановить.

Очевидно, оба корня будут вещественны, если

 

выполнены

неравенства

 

 

 

 

 

 

 

■х > о

 

, так как

0 .^ 0

 

х -а

, т .е .

 

 

 

 

 

 

 

Программа будет составлена следгпцшм образом:

 

 

П р и м е

I

 

 

 

 

 

1. З В О ^ Д ,А

 

 

 

 

 

Е С Л _ Л _ (/ 4 .-,'Г О ~ 4 1

ВЫЛ ~ Z -(X + A )*0 ,5 -(Х -А )’0 ,5 1 ШЛ^.Ж^ = 0 ^ Т 0 ^ 2 ^ ИНА ^ ,3 1

2. вын^у= а

ЪШ ^НА^БПМ ^П

КОН X

3 . ВЫЛ „ Y =S IN (Z ):Z &

ЪШ ^НА^БПМ ^УХ

4 . KOH^I

КАЛ^/ f

Можно заметить, что наш пришлось несколько раз повторять одни и те же операторы: НАЛ— НА—>БПМ^ V % , КСН.— I .Это­ го можно избежать, если использовать оператор безусловного перехода ПЕРЕЙТИ, который будет разобран ниже.

2 ) . Если точка ( « , у ) попадает в прямоугольник Q.&X&& ,

54

С41/&. d

, то

требуется увеличить т на единицу,в

против­

ном случае

оставить гп

без изменения. Здесь

предполагается,

что значения и

, v ,

т вычислены раньше.

П оэтов

запишем

только участок

программы, относящийся к этой задаче.

 

 

Ш ~ и ^ )= А ~ Т О ~ * ~И Н А ~5Е

 

 

1 .

ЕСЛ - и -.(= В^ТО^.2 - ИНА^5Я

 

 

2 . Е С Л ^ '/ _ ; = С ^ Т О ^ З ^ И Н А ^ 5 Х

 

 

3 .

m JL^V ^(=Z )^rO ^-,4 ^И Н А ~5 Я

 

 

4 .

ВЫЧ

 

- M + iS

 

 

 

 

5 . КОН^Л

 

 

 

 

Для экономии меток можно было программу с метки 3

запи­

сать

иначе:

 

 

 

 

 

3 .

ВСЛ

V*->) D ^ ,T 0^ 5 К

 

 

 

 

 

ВЫЧ

= м + и

 

 

 

 

5 .

КОН ^ 1 '

 

 

 

 

3 ) .

Вычислить куб максимального

из 2 -х

чисел а 1 и

а £ с

выводом на печать результата. Числа

а , и

az определены ра­

нее,

поэтому

запишем только участок программы.

 

 

 

ЕСЛ^ДУ^ (AZ^TQ^iS

 

 

 

 

 

ВЫЧ^.У = А Р З Е

 

 

 

 

 

НАЛ ~ Н А ^БПМ ^УХ

 

 

 

 

 

КОН^Х

 

 

 

 

I .

ВЫЧ^У = А 2 ’ 3 X

 

 

 

 

 

ЕШ~НА~БПМ^УХ

 

 

 

КОН^Х

Здесь, так же как и в примере I , можно было бы упростить программу, использовав оператор ПЕРЕЙТИ — .

Оператор ПЕРЕЙТИ _>

При реализации счета разветвляющего процесса практически

всегд а встречается необходимость перехода от одного

операто­

ра к другому,

не соседнему, без проверки каких-либо

условий.

Такой переход

обычно называют безусловным. На языке

АКИ он

выполняется оператором ПЕРЕЙТИ. В информационной части вслед

за пробелом ставится метка оператора, к которому происходит безусловный переход. Например, ПЕРЕЙТИ l_i 6 X .Теперь рассмот­

55

рим запись участка программы предыдущего примера 3 с исполь­ зованием оператора ПЕРЕЙТИ — .

Е С Л -/ 4 У _ (/ 4 2 _ 7 7 7 — / X

В Ы Ч -У =А1 X

П Е Р - 2 I

1 . ВЫЧ—У = А 2 £

2. В Ш ^ У = У ’ ЗХ

НАЛ - НА^БПМ^УХ

КОН - 2

Запишем еще программу предыдущего примера I с использо­ ванием оператора ПЕРЕЙТИ.

П

р а м е р ^ Я

 

I .

ВВО ^ А ,Х Е

X

 

Е

С

ВЫЧ- Z - ( X + A ) ,0 ,5 - ( X - A ) , 0 ,5 X

ЕСЛ — У - = 0 - Г О — 2 — к

2.

ВЫЧ - , У = 1 Х

 

 

 

ПЕР -

S E

 

 

3. ВЫЧ Y - S I N ( Z ) : Z

X

 

5.

НАН- НА _ 6 ( 1 M Y Y

X

 

•4.

КОН-

X

 

 

 

H A 4 ^ iZ

 

 

Оператор ПЕРЕЙТИ часто

применяется для организации цик­

л ов , о

чем будет рассказано в следующем параграфе.

 

 

§ 7 .

Программирование циклических процессов

 

При решении многих инженерных задач встречаются

группы

логических и арифметических операций, ноторуе требуют

много-:

кратного повторения. Вычислительные процессы такого вида на­

зываются циклическими,

а повторяющиеся участки программы

циклами.

 

 

Различают циклы с

заданным и с неизвестным числом повто­

рений (итерационные циклы).

 

 

22,

/

Например, если требуется определить S = )

--------- ,

 

п=/

n*-+i

56

зо надо 30 раз

повторить вычисление

-— j -

 

 

при

П = I , 2 , . . .

30, т .е . это - циклический

ииицеоо

с заданный

числом повторений.

 

 

 

 

Если же надо вычислить с заданной точностью

«г

корень

уравнения

 

методом последовательных

приближений

(методом итераций), то расчеты по форцуле

ccK^i

-<р(^/к)

 

будут проводиться до тех пор, пока ма не

выполним

условие

I XK*t ~хк I

 

в э м и примере число

повторений

цикла заранее

неизвестно.

 

 

 

 

В АКИ циклические процессы описываются при помощи опера­

тора ПОВТОРИТЬ и.,

и ранее рассмотренных операторов ЕСЛИ —

и ПЕРЕЙТИ_ .

 

 

 

 

 

 

 

 

Оператор ПОВТОРИТЬ

 

 

 

 

Оператор ПОВТОРИТЬ ставится всегда з

конце цикла.

В

ин­

формационней части оператора обязательно указывается

метка

аачада цикла;

от

нее повторяется весь участок программы

до

оператора ПСВТОРИТЬ.

Если надо просто повторить некоторый участок программы определенное количество раз без всяких изменений, го запись оператора выглядит так:

ПСВ» 3 » . 10 3 ,

что означает: повторить участок поограммы, начиная с -«тки 3, 10 раз.

Пример. Вычислить 100!

Программа в АКИ будет выглядеть так:

Пр и м е р ы !

1.- ВЫЧ » -Р~i-.fi - 01

2.ВЫЧ » V?» Я+ i- P = P-R I

ПШ » 2 —100 I

НАЛ » НА-БПМ^. :Р I

КОН » I

нач » а

Часто при каждом повторении цикла требуется внестн ка­

кие-нибудь изменения в параметры, участвующие в вычислениях. Например, при определении значений функции ^(аг)-\^ог^+Т

 

 

х

 

 

 

 

 

 

57

для значений

из заданного

промежутка £ o ,l]

с

шагом

Л ог = 0 ,1 нужно

повторять однотипные вычисления

I I

р аз,

ме­

няя каждый раз значение аргумента х .

 

 

 

 

Б

таких

случаях делается

сведущ ая

запись;

 

 

 

П®—

X

= 0 — ( 0 ,1 ) —. ( = 1 1 ,

что означает;

 

повторить

участок программы, начиная с

метки 5 ,

меняя каадый раз

зна­

чение

простой переменной X от

0 до I

с

шагом 0 ,1 .

 

 

 

Как видно из записи оператора, шаг изменения простой пе­

ременной обязательно заключается в круглые скобки, а условие

выхода из цикла заносится

с использованием какого-нибудь из

знаков отношения ( или

(= .

И р а н е р .

значения функции Ц ,х по форьуле

Вычислить приближенные

Д»я

0 ^

0,5

через

0 ,1 .

 

 

Результаты вычислений свести в таблицу.

 

 

П р

н к е р — 1

 

 

 

ТВ(Х )\ <=

1 . ВЫВ—

ТЕС— ТАБЯЩА — ЗНАЧЕН® — ФУНКЦИИ -

 

> 3 0 -

= ’ <

н

 

 

 

-

• % - — ” Х ” 5 —

’ 5 ____У " 5 —

<

=

 

> 3 0 -

- » <

X

 

 

 

2 . ВЫЧ — А = X ’Z < -.М = А 'Г~ А 2=5-А {^ АЗ =А -А 2^АЬ=3- =

АЗ^А5 = A-Ak^AS = i - / 1 5 — Y -X -А6

1

 

ВЫВ - Т Л б - 5

- ЗНА-

/ 0 - Х , //- Г - 1

 

 

в © —г е к —•з о - = ’ I

 

 

КОН -

1

 

 

 

 

НАЧ -

U

 

 

 

 

На рулене АЦПУ будет получена следующая запись:

58

ТАБЛИ Ufl _ З Ы Д Ч ЕН и И

T b HK i ^ wu Т G-( X ) .

х

:

Y

О , 0 0 0 0 0

 

0 , 0 0 0 0 0

0 , 4 0 0 0 0

 

O f 4 0 0 3 3

0 , 2 0 0 0 0

 

0 , 2 0 1 7 1

О , 5 0 0 0 0

 

0 , 3 0 9 3 0

б >9 0 0 0 0

 

О , { { 2 2 7 $

О , S 0 О 0 О

 

0 , 5 * 6 3 0

Часто меняющимся параметром является индекс - номер эле­ мента массива. Как уже говорилось, индекс можно обозначать любой из 4 -х букв I,J,K ,L , причем над индексами нельзя производить никаких арифметических операций при помощи опе­ ратора ВЫЧЮИГЬ. Для изменения индекса внутри цикла в опе­ раторе ПСВТОРИТЬ используются следующие записи:

1 .

ПСВ

 

 

= f ^ ( 2).

71

 

 

 

 

 

 

Это

означает:

повторить участок

программы,начиная с

мет­

ки 3,

причем при каждом повторении цикла менять

значение

ин­

декса

I

от I с

шагом 2

7

раз ( т .е .

последнее

значение

 

1 = 1 3 ).

Здесь

мы имеем цикл

с заданным числом повторений -

цикл повторяется 7 раз.

 

 

 

 

 

 

 

 

2 .

Ж В - 5 - 1 = 1~(2)~7Х

 

 

 

 

 

 

 

Это означает: повторить участок программы,начиная с мет­

ки 3 ,

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

от I с

шагом 2

до 7 ( т .е .

последнее

значение I

=

7 ) . Коли­

чество

повторений цикла вычисляется

автоматически

и в

про­

грамме

не указывается

(в данном случае

оно

равно 4 ) .

 

Если в

операторе

ПОВТОРИТЬ указывается

число

 

повторений

цикла,

то

при работе

машины в режиме

"Т" шаг изменения

ин­

декса,

равный I ,

можно не

писать. Например,

 

 

 

 

ПОВ _ 5L- У = 1.NS

 

 

 

 

 

 

 

 

N

Т .е .

повторить участок

программы,

начиная с

метки 5 ,

раз, изменяя каждый раз значение индекса J

с I

 

через

I

(здесь

 

N - обязательно переменная целого типа).

 

 

 

Кроме того,

при работе в

режиме

"Т" модно не

 

указывать

число повторения цикла, равное I .

 

 

 

 

 

 

Например,

 

 

 

 

 

 

 

 

 

 

 

ПШЫ 5i_. К =

о X

 

59

 

 

Т .е . повторить

участок программы, начиная с

метки 5 , один

раз при значении индекса К = 5 .

 

 

3 . В операторе

ПОВТОРИТЬ ш кет указываться

информация об

изменении нескольких параметров

и индексов. Тогда все пере­

менные и индексы,

записанные в

одном операторе

ПОВТОРИТЬ, ме­

няются одновременно. Условие выхода из цикла

указывается

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

информации о

каждой

из переменных отделяются друг от

 

друга

точкой.

 

 

 

 

 

 

 

 

 

П0В_ 2^Х=Х0~(Т).1= 1^(1). К =2^(5)^ Н X

 

 

 

Это означает: повторить участок

программы,начиная

с мет­

ки 2, причем при каждом повторении менять

значение X от ХО с

шагом Т, значение У

от I

с шагом I

и значение К от 2

с ша­

гом 3, пока

значение К не

станет

равным I I

(цикл

будет

по­

вторяться 4

р а за ).

 

 

 

 

 

 

 

 

4 . В операторе ШВТОРИГЬ может быть не указано

условие

выхода из щпсла. Тогда оно

должно быть записано внутри цикла

при помощи оператора ЕСЛИ.

Запись в

операторе

ПШТОРИТЬ в

этом случае

следующая:

 

 

 

 

 

 

 

П О З 7~.I=2.-K=3~(i) X

 

 

 

 

 

 

Это означает: повторить участок

программы,начиная с мет­

ки 7 , меняя

значение

индекса 1

от 2

через

I и К от

3

че­

рез I .

 

 

 

 

 

 

 

 

 

Рассмотрим примеры с оператором ПОВТОРИТЬ.

 

 

 

I ) . Составить единичную матрицу

из 30

строк

и 30

 

столб­

цов.

 

 

 

 

 

 

 

 

 

П р и м е р ^ 1

 

 

 

 

 

 

 

 

1 . ш ~ А ( 9 а о ~ з а - з о ) х

 

 

 

 

 

 

2 . В

А /1,71 = ОХ

 

 

 

 

 

 

 

ПСВ _

2 ^-.1= 1- ЗОЕ

 

 

 

 

 

 

 

nCBw 2_Л 7 = L. ЗОЕ

3 . ЪШ^А /1 ,7 / = 1 Е

П С В^З^Г= i.7 = l^ (f).3 0 E

НАЛ.. НА _ БПМ^ А (ЗО.ЗО)Х

КСН-Я

НАЧ^УХ

В этом примере при повторении метки 2 i и ? меняются не­ зависимо друг от друга, т .е . все элементы матрицы полагают-

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