книги из ГПНТБ / Мараева И.Б. Вычислительная техника в инженерных и экономических расчетах. Автокод Инженер для ЭЦВМ Минск-22 учеб. пособие
.pdf50
§ б» Программирование разветвляющихся процессов
При реализации автокодовой программы после каждого опе ратора выполняется оператор, записанный в следующей строке программы» Однако такой естественный порядок выполнения опе раторов иногда нарушается. Ход вычислительного процесса из меняется в зависимости от получаемых при вычислении резуль татов или исходных данных. Например, знак числа, т .е . значе ние функции 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 и ? меняются не зависимо друг от друга, т .е . все элементы матрицы полагают-