П р и м е р 3. В ы ч и с л е н и е п о к а з а т е л ь н о й ф у и к-
ц и и ех : ,
ех — 1 -| - х -j- -fjj- - j - . . . (17) Д л я цикличности вычислений суммы ряд а (17) воспользу
емся рекуррентными соотношениями м е ж д у членами ряда и п и частными суммами s n :
"»+! = "» 7 Г Т Г : | (18)
5 Л + 1 — 5 л Н “ М Я + 1 * )
Отдельный цикл вычислений состоит в вычислении по данным п , и п, s n,
которые мы поместим в ячейки З У ocj, а2> аз>
величин п -1- 1, и„.иь s„+i, которые помещ аю тся в тех ж е яч ей ках З У а ь ао, аз- Д л я выполнения вычислений по ф о р м у л ам (18) числа х и 1 поместим в ячейках З У а.} и аз.' Вычисления п р е к р а щаются, лиш ь только вычисленный член р я д а ип+1 о к а ж е т с я меньше зад ан н ого числа е, которое помещ ается в ячейке З У а с.
Д л я составления программы остается заметить, что исход
ные значения переменных величин п, и,„ s n д олж н ы быть сл е
дующие:
п — 0 ; н0 = 1; s0 — 1.
7 *
1 0 0 Э Л Е М Е Н Т А Р Н О Е П Р О Г Р А М М И Р О В А Н И Е [ Г Л . I l l
П р о г р а м м а II
Ч и с л а К о м а и л ы
О к -f-1
к + 2 к + 3 к + 4 к + 5 л + с
+ а і a 'j
а ’
X <*2 а 2
Яо «1 а2
+ я3 а 2 «3
1 < | «0 « 2 к 4 - 1
ост.
п 4- 1
и пх
«Я + 1 5/Н-1
П р и м е р 4. В ы ч и с л е н и е т р и г о и о м е т р и ч е с к и х ф у н к ц и й . Рассмотрим для примера вычисление функции sin а* при помощи степенного ряда
А'3 , Л'5 Ш Х = Х — 3T + S T — • • •
К а к и в предыдущем случае, воспользуемся соотношениями м е ж д у членами ряда и частными суммами:
['л+1
!ta+l ( « = 1, 2 , . . . ) .
(19) Д л я цикличности вычислений по формулам (19) остается составить рекуррентные соотношения д л я а п. Обозначим Ьп = 2п; сп = 2/z + 1; тогда
Ь п- И = С л + 1 ’ ^ ^ /Н -1 “ Ь п + 1 ' с а + !• (20) И следовательно, каж ды й цикл вычислений по ф ор м у л ам (19)' и (20) состоит в вычислении по данным s,„ сп, которые мы поместим в ячейках З У а ь ао, аз, величин ип+ь S/м-ь сп+\, ко
торые помещ аются в тех же ячейках З У а ь аг, аз.
Ч исла — а 2, 1, Ь п поместим в ячейках З У а.(, а г,, сп.
Д л я числа a fl „можно использовать ту же ячейку <п, т а к к а к значение Ьп д л я подсчета следующего цикла не нужно.
Исходное значение переменных величии следующее:
11q = X', s0 — X', Cq = 1.
К а к и в предыдущем примере, вычисления п рекращ аю тся при условии, что вычисленный член ряда u n+i меньше з а д а н ного числа с, которое поместим в ячейку З У ао.
§ 3]
П р о г р а м м а 12 Ч и с л а
«1 -V и„ к 4 - 1
«2 X *п к + 2
«3 1 С,г к + 3
«4 — Л-2 к + 4
С г 1 к + 5
Of. к -f- 6
- Ьп к + 7
к 4 - 8
Ц И К Л И Ч Е С К И Е П Р О Ц Е С С Ы
К о м а н д ы
1 0 1
+ « 3 «5 а 7
4- « 7 а5 « 3
X
“ 7 «а « 7X
«1 «4 «1: а, « 7 «1
4- а 2 “ | «2
K I
«С «I ft 4-1ос т.
ь 1 Cl
а х
«1 5|
■X U Q
Д л я вычисления t g * воспользуемся разл ож ени ем его в не
прерывную дробь. При условии, что | л: | < — , tg,v можно вы числить с точностью до 10“ 10 посредством формулы
^ х = ү , (21)
гд е
у = \
(22) 11
13 — 15
По схеме, аналогичной схеме Горнера, ф о р м у л а (22) з а п и шется в виде
у = ( 1 — х2,: {3 — х 2: [ . . л;2 : {11— х 2 : (1 3 —Jt2 : [1 5 1 )} ..-1 •• • })•
(23) Вычисления у по ф ормуле (23) состоят в последовательном вычислении скобок ачи-х по ф ормуле
ІІ2Һ — 1 — (2/d 1) (24)
1 0 2 Э Л Е М Е Н Т А Р Н О Е П Р О Г Р А М М И Р О В А Н И Е І Г Л . III
н п р ед став л яе т собой циклический процесс, причем = О т
дельны й цикл состоит в вычислении по данным ( 2 Л + 1 ) , «2А-Н»
которые помещ аю тся в ячейках З У av сс2,
величин (2k— 1), гг2*—1 , которые помещаются в те ж е ячейки ЗУ а\, 0.2-
Д л я вычисления у используются числа х 2 и 2, которые по
местим в ячейках З У аз и а.ь
И сходное значение переменных величин следующее:
2/г-}- 1 = 2 - 7 + 1 = 15;
n 2 k + l ~ /г15 = 1 5 .
Процесс вычислений у по формуле (24) зак ан ч и в аетс я после вычисления и\\ при этом в ячейке З У ai будет содер
ж а т ь с я число 1.
В соответствии с этим переход от одного ц икла к другому до получения величины у мож но осуществить при помощи сле
дую щ ей ком анды условного перехода:
«1 к-\-1
после которой следует вычисление t g х по ф ормуле (21) и пре
к р ащ ен и е расчетов, т. е. команды
• а5 «2 «1
ост.
где в ячейке З У ar, содерж ится х.
П р о г р а м м а 13
Ч и с л а К о м а и д ы
«1 15 2/г -f- 1 к + 1 — «1 « 4 «1 2/г — 1
о2 15 » 2 Л + 1 к + 2 : а2 а 2 х'2
2 к — 1
«3 Л'2 Л + 3 — «1 « 2 «2
«2/С-І
2 к -'г 4 « 4 «1 /г + 1
«5 X к + 5 : а 5 « 2 «1 \ g x
А + 6 ост.
Ц И К Л И Ч Е С К И Е П Р О Ц Е С С Ы 1 0 3
П ро гр ам м а 13 п р ед став л яе т собой простейший пример сое
динения программы циклического процесса (4 ком анды ) и про- граммы вычислений по ф орм ул е (1 к о м а н д а ).
П р и м е р 5. П р и в е д е н и е а р г у м е н т а . Во многих слу
чаях д ля вычисления тех или иных значений функций удобно пользоваться ф орм ул ам и приведения аргумента. Это бывает необходимо, например, при вычислениях тригонометрических функций д л я больших значений аргум ента в м аш и нах с фикси
рованной запятой. П риведение аргумента д л я случая функций, вычисляемых при помощи их р а зл о ж е н и я в ряды, очевидно, сократит число отдельных циклов вычислений.
Рассмотрим приведение аргумента д л я функции sin,v к ин
тервал у | л : |< ! - J . Обозначим
Ф (л ) = | j j i Т } ~ 2 ' (25)
Очевидно, при произвольном х
sin х — sin ф (х) и | ф (я) | •<
Таким образом, вычисление sin х р а зб и ва ется на д ва этапа:
1) вычисление ф(х) по формуле (25), 2 ) вычисление sin(J>(x).
Второй из этапов — вычисление sin ф (л :)— мож но осущ е
ствить по п рограм м е 12 вычисления синуса, если содерж ание З У будет предварительно н ад л е ж ащ и м об разом подготовлено.
С целыо сохранения вида команд, осущ ествляю щ их вычис
ление синуса по п рограм м е 12, занесем в ячейки З У
«з» «5> «с величины
1, 1, з.
Д л я подготовки с о д ер ж ан и я ячеек сп, ао, сц используем про
цесс вычисления ф (лг).
Д л я вычисления ф(х) по ф ормуле (25) поместим величины X , 2-ГГ, —£■, тс, -jj-
в ячейки З У
av а2, а,, а7, а8
соответственно. Буд ем предполагать, что среди элем ен тарн ы х операций, выполняемых машиной, имеется операция взятия дробной части числа { } (см. программу 5) и взятия модуля ,(см. п рограмму 6).
Тогда вычисления по ф ормуле (25) осущ ествляю тся к о м а н д ам и
1 0 4 Э Л Е М Е Н Т А Р Н О Е П Р О Г Р А М М И Р О В А Н И Е [ Г Л . I l l
ft-f 1 : ai «2 «1 X
2 к 4 1
к + 2 — ai «4 а1 2 X = "
к -{- 3 { > «1 «1 J*. І 2 т: - 1 }
к + 4 X «1 а2 «1 / \ V / 2 -
к +5 — «1 а 7 а1 { > 2 -_г.
к -f- 6 1 1 «1 «1 к } 2 п-г.!
к -j- / — «1 «8 «1 1 1 --J j-=,*(*)
Д л я вычисления sin ф(л:) остается подготовить сод ер ж ан и е ячеек З У аг и а.ь что можно осуществить ком андами
к + 8 -г «1 »2
к + 9 X «1 «1 а4
к 10 — «4 «4
П р о г р а м м а 14
sin л' — sin 'Һ (л); 6 (д) = 11 -^2--- "
Ч и с л а К о м а н л ы
«! Л' ип Л + 1 : «1 а2 «1
а2 2 « sn /г+ 2 — «і «4 “1
«3 1 сп ft -f- 3 { > «1 «1
О) 4 1 — (-*) к + 4 X «1 а 2 а1
а 5 1 ft + 5 — «1 «7 «1
ас е
ft+ 6 1 1 «1 а,
а 7 т. Ьп к + 7 — а, «3 «1
«8 2 ft+ 8 + «1 а 2
Ц И К Л И Ч Е С К И Е П Р О Ц Е С С Ы 1 0 5
к + 9 X «1 «1 « 4
k + 10 — « 4 <*4
Л + 11 + « 3 а5 « 7
Л + 12 + « 7 а 5 а 3
к + 13 . X а7 а 3 а7
к + 14 X <*! «4 «1
к + 15 «1 а 7 «1
к + 16 + а2 «1 а2
/г + 17 | < | яй а 1 /г + 11
к + 18 ост.
П рограм м а 14 пред ставл яет собой пример соединения двух программ: программы вычислений по ф орм уле (25) (10 команд) л циклической программы вычисления синуса (8 ком анд).
В некоторых случаях вычисление значений функции может быть сокращено, если использовать соответствующие рекуррент
ные соотношения. Рассм отри м примеры.
П р и м е р 6. В ы ч и с л е п и е и п е ч а т ь т а б л и ц ы з н а- ч е н и й ф у н к ц и и е к,\ к — 1, 2, ..., N.
Это можно осуществить по формуле
е кк = • ен. (26)
Пусть величина е н известна и находится в ячейке З У pi, вы
числяемое значение е кН будет помещ аться в ячейке ЗУ$-2- Отдельный цикл вычислений состоит в умножении по ф ор
муле (26) и печати числа, находящ егося в ячейке З У {5о, со
д е р ж а щ е й в н а ч а л е е° = 1, и выполняется ком ан да м и
X Р. Р2 ОiJ2
П І-2
Число циклов в данном случае равно N.
О днако окончательное (N -e) значение ни одной из встре
чаю щ ихся величин зар а н е е не известно. Поэтому д л я перехода
106 Э Л Е М Е Н Т А Р Н О Е П Р О Г Р А М М И Р О В А Н И Е ( Г Л . II I
от одного ц икла к другому и прекращ ения расчетов необхо
димо воспользоваться известным числом N повторений ц икла, которое мы поместим в ячейку З У 133.
В ведем в рассмотрение вспомогательную «целочисленную»
переменную *) і, изменяющ ую свое значение при переходе от ц и к ла к циклу на «единицу» и имеющую начальное зн ач ен ие
і = 0. Поместим эту переменную в ячейку Ц и кл вычислений дополним командой, которую поместим в н ач ал е цикла:
+ Рч Рз Рч
где в ячейке (З5 содерж ится «единица». Тогда ячейка (34 в любой момент времени содержит число единиц, равное числу вы п ол нений цикла. Такие ячейки принято н азы вать счетчиками по
вторений цикла.
Теперь логическое условие, например, Р { і Ф N )
м ож ет быть использовано д л я определения окончания ц и к ла , а ко м ан д а
Рз Рч к — 1
н а х о д я щ а я с я в конце цикла, будет осущ ествлять п роверку өтого условия и соответствующую передачу управления.
П р о г р а м м а 15
Ч и с л а К о м а н д ы
Р. ен k — \ + Рч р5 Рч
р2 1 скһ к X Р. Рг р2
Рз N k + \ п р2
Рч 0 1 k + 2 —Х~ Рз Рч k — 1
р5 1 ост.
*) При этом в качестве «единицы» м ож ет быть принята, например, еди-*
ница м ладш его р азр я да.
Вместо логического условия Р{і Ф N) мож ет быть использо
вано логическое условие
P { i > N \ . Команда
§ 3] Ц И К Л И Ч Е С К И Е П Р О Ц Е С С Ы 107
Рз Рч к + 4
н ах о д ящ а яся после ( к— 1)-й команды, выполняет переход от одного цикла к другом у и передачу у п равл ен ия па останов при окончании расчетов. При этом цикл з ак ан ч и в аетс я операцией безусловного перехода к н ач ал у нового цикла, т. е. командой
к — 1
П р о г р а м м а 15j
Ч и с л а К о м а н д ы
Р. eh к — 1 “Ь Рч р5 Рч
р2 1 е кһ к < Рз Рч к + 4
Рз N к + 1 X Р. Р2 Р2
Рч 0 к к + 2 п Рг
Р5 1 Л + 3 < к — 1
к + 4 ост.
К ом ан д а к— 1 выполняет счет числа циклов, т. е. работу счетчика (ячейка З У pi).
К ом ан д у к— 1 можно поместить и после команды к, но в этом случае д л я выполнения N циклов в ячейку З У рз следует поместить число N— 1, или, сохранив прежнее содерж ание ячейки рз, к н ач ал у первого цикла в счетчик р4следует занести единицу.
К о м ан д а безусловного перехода к + 3 мож ет быть опущена, если ком ан ду к поместить в конце цикла, переставив в нем местами первый и второй адреса. Теперь ком ан да « < » будет п еред ав ать уп равлен ие ком ан де к— 1 до тех пор, пока в ячейке З У р{ не появится число N, после чего будет выполнен останов.
Всего будет выполнено N циклов.
108 Э Л Е М Е Н Т А Р Н О Е П Р О Г Р А М М И Р О В А Н И Е [ Г Л . l i t
П р о г р а м м а 152
Ч и с л а К о м а н д ы
Р. e h к + 1 + ОVA 01 '5 Рч
р2 1 е кп к + 2 X Р. Рз с
V2
Рз N к + 3 П р2
Рч 0 к к + 4 < Рч *3 /г Н- 1
р5 1 * 4 - 5 ост.
Пусть теперь величина ен не д ан а, а д о л ж н а вы ч и сл яться по д ан н о м у к, которое поместим, имея в виду вычисление е'1 по програм м е 11, в ячейку а*.
Вычисление и печать таблицы значений функции е и,\
k = 1, 2, ..., /V, в этом случае распадается на два этапа:
1) вычисление ен по программе 11; значение е'1, согласно этой программе, будет получено в ячейке аз;
2) вычисление екН по программе 15, в которой ячейка З У {Зг д о л ж н а быть зам енена ячейкой З У аз и третий адрес в (к 4 - 4)-й ком ан де д олж ен измениться согласно с новым номером н а ч а л ь ной команды . Кроме того, в качестве единицы д ля счетчика м ож н о использовать вместо ячейки З У $з, ячейку аз. П р о г р а м м а будет иметь следующий вид:
П р о г р а м м а 16
Ч и с л а К о м а и д ы
«1 0 к + 1 ~Ь <*i а5 «I
а2 1 к + 2 X «2 ач «2
«3 1 с'1 /г + 3 : «2 «I «2
сс4 Һ к -f- 4 + «3 а2 «3
ас 1 к 4- 5 | < 1 “о а2 к 4- 1
«с е к 4- Г) X «3 р2 Рг
Рг 1 ekh к 4-7 п Рй
Рз N k 4-8 + Рч «5 Рч
Рч 0 * 4 -9 < Рч Рз к 4-6
к 4- 10 ост. 11
Ц И К Л И Ч Е С К И Е П Р О Ц Е С С Ы 1 0 9
П рограм м а 16 п редставляет собой соединение двух цикличе
ских программ — программы 11 (5 ком анд) и программы 15 (5 ком ан д). К а к видим из данного примера, при соединении программ, сод ерж ащ и х команды условного и безусловного пере
хода, третьи ад реса последних могут изменяться.
Вычисление и печать табли цы значений функций cos (а + kh) , sin (а -Ь /г/г) (к = 1,2, . . . , N) можно получить, используя формулы:
cos ( a - \ - k h ) = cos h cos [ а -f- (/г— 1) /г)—sin h sin \ a -f- (/г — 1) h\, j sin ( a - \ - k h ) = sin h cos \ a - \ - { k — 1) /г] —j— cos h sin [a-+-(k—1) h\. J
Пусть величины cos h и sin h известны и н аходятся в ячей
ках З У pi и {Зо. Вычисляемое значение cos (а -}- kh) и sin (а + kh) будем помещать в ячейки З У 13з и
Отдельный цикл состоит в вычислении по ф орм ул ам (27) и печатании чисел (Зз и |5i и осущ ествляется ком андами:
к -f 1 k +2 Л-t- з к -f 4
к -f- 5
к + 6
/г -f- 7
к 4- 8
X О\J2 Рз 0)1
X Pi Рз Рз
X p. ОV 4 (i)2
X а р4 ОlJ 4
— Рз Рч Рз
п Рз
1 О), С>2 о
IM
п р . ■
sin h cos (a -f- (к — 1) h)
cos
h
cos ( a -f-(к
— 1)h)
cos h sin (a -j-
(к
— 1) h)sin
h
sin(a
-f-(к
— 1) /г) cos ( a -f- kh)sin (a -f- kh)
К ак и в предыдущем примере, число циклов зар а н е е известно и равно N, но окончательные значения переменных, встречаю
щихся в вычислениях, зар а н е е не известны. Поместим в ячейку З У Вз число /V — 1 и используем ее д ля перехода от одного цикла к другому и определения окончания расчетов. С этой нелыо введем счетчик числа циклов в ячейке З У начальное сод ерж ан и е которой будет 0, и в ячейку З У р7 поместим «еди
ницу» д л я счетчика. Отдельный цикл вычислений, таким о б р а зом, пополняется ком ан дам и
+ Ро р7 Ро
< Ро Ро к + 1
которые мы поместим в конце цикла.
1 1 0 Э Л Е М Е Н Т А Р Н О Е П Р О Г Р А М М И Р О В А Н И Е [ Г Л . III
Исходное со д ер ж ан и е ячеек (З3 и {34 д олж н о быть cos а и sin а.
П р е д п ол ож и м так ж е, что эти величины известны.
П р о г р а м м а 17
Ч и с л а К о м а н д ы
р| co s Һ ft + 1 X P2 Рз W,
р2 sin ft ft + 2 X Pi Рз Рз
Рз cos a cos (a + ft ft) ft + 3 X P. P4 0)2
р4 sin a sin (a kh) k -f- 4 X P2 Рч p4
Ро N — 1 к + 5 — Рз p4 Рз
Ро 0 к k -f- 6 П Рз
Рт 1 k + 7 + (0, <0 2 P4
(О, ft + 8 П P4
со2 ft + 9 . + Pc P7 Pc
к + 10 Pc P5 ft + 1
ft + 1 1 ocrti.
В ы в о д ы
1. Д л я циклических вычислительных процессов нужно сос та
в лять программы, состоящие из команд, необходимых д л я вы полнения одного (первого) цикла вычислений, и некоторых вспомогательных команд.
2. Вспомогательными в циклической п рограмме я в л яю тс я ком анды , подготавливаю щие н ад л е ж а щ е е заполнение З У д ля п ерехода от цикла к циклу, и команды, обеспечивающие необхо
д им ое число повторений циклов.
3. При построении циклических программ вычисляемые з н а чения переменных, подготавливаемые д ля выполнения (к + 1)-го цикла, нужно помещ ать в ячейки, в которых находились их к-е значения.
4. Д л я построения логического условия, определяющего окон
чание циклического процесса, можно воспользоваться либо спе
ц иально введенной переменной, либо переменной величиной, встречающ ейся в вычислениях.
В первом случае удобнее всего ввести «целочисленную» пе
ременную к (к — номер выполняемого ц и к л а ), т а к назы ваем ы й счетчик.
Ц И К Л И Ч Е С К И Е П Р О Ц Е С С Ы 1 1 1
При этом необходимо иметь:
а) счетчик числа циклов — ячейку, изменяющ ую свое со
стояние от цикла к циклу по определенному закону;
б) условную единицу д ля с ч е т ч и к а — ячейку, с помощью ко
торой происходит изменение счетчика;
в) ячейку, со д ер ж ащ у ю предельное заполнение счетчика;
г) команду, выполняющую работу счетчика (входящую в ц и к л ) ;
д) команду, выполняющую проверку заполнения счетчика для выяснения окончания процесса и передачи управления н а чальной команде или следующей за циклом ком анде (такж е входящую в ц икл);
е) помимо ячеек а) — в) и ком анд г) — д) , необходимо к мо
менту работы циклической программы обеспечить «начальное»
заполнение счетчика и всех изменяемы х от цикла к циклу вели
чин соответственно их значениям перед прохождением первого цикла.
Переменной величиной, входящей в вычисления, можно вос
пользоваться д л я определения окончания циклического процесса, если известно ее окончательное значение или условие, которому последнее д олж но удовлетворять.
5. Если допустим набор значений входящ их в вычисления п араметров, при котором циклический участок программы д о л жен быть опущен, то команды, осущ ествляю щ ие проверку логи
ческого условия, определяю щ его окончание циклического про
цесса, надо р асп ол агать в начале цикла. В таком случае цикл в конце дополняется операцией безусловной передачи у п р ав л е
ния первой команде.
У п р а ж н е и и я
1. Составить программу для вычисления и печати таблицы квадратов нечетных чисел натурального ряда.
3 у —
2. Составить программу извлечения кубического корпя у — у х , исполь
зуя итерационный процесс
, . + 1 4 ) .
3. Составить програм му вычисления обратной величины для машины, у которой нет операции деления.
4. Составить программу вычисления In х при помощи ряда.
1 5. Составить программу извлечения кубического корня у — \ f x , исполь
зуя итерационный процесс, приведенный в упраж нении 2, для машины, у которой нет операции деления.
6. Составить программу вычисления l n ( l - f - . v ) , \ х \ < 1 при помощи ряда.
1 1 2 Э Л Е М Е Н Т А Р Н О Е П Р О Г Р А М М И Р О В А Н И Е [ Г Л . III
7. Составить программу вычисления е х , используя представление е х — , гд е у = 2 --- --- - j
10 + 14
18 + %
для 0 < | д - ! < 1.
8 . Составить программу вычисления сх , х > 0, используя с о о тн о ш ен и е
cx = eE w e ^
н им ея в З У величину е.
9 . Составить програм му вычисления и печати sin (а + k h ) и co s (я + АЛ) для k — 0, 1, . . N в случае, когда cos Һ и sin Һ зар ан ее не заданы . И сп ол ь
зовать програм м у вычисления s i n /г, ф орм улу cos Һ — Y \ — Sill2 ll
и програм му 10. Считать, что в число элементарных операции, выполняемых машиной, входит операция извлечения квадратного корня.
10. Составить программу вычисления и печати sin (а + АЛ) и cos (л + АЛ), А = 0, N , в случае, когда co s Л и sin Л зар ан ее пе заданы. И спользовать пр ограм м у 16 и программу вычисления синуса для вычисления sin л- и
( т - 4 sin
11. Составить программу вычисления cos л- с помощью ряда
1 А'2 1 л'4 С08Л'=1 - ^ + — _ . . .
12. Составить программу решения уравнения
ұ Д -Ч - л'— 1,2502 = 0
м етодом и тер ац и и .'
13. Составить программу для вычисления скалярного произведения д в у х векторов.
14. П остроить управление циклическим процессом в программе 15 с по
мощью операций передачи управления « = », «УПЧ», «УПП».
§ 4. Циклические процессы, зависящ ие от парам етров В предыдущем п ар агр а ф е рассматривались циклические про
цессы, в которых при переходе от цикла к циклу изменялось лиш ь сод ерж ан ие числовых ячеек ЗУ. Здесь 'мы рассмотрим циклические процессы, в которых при переходе от цикла к циклу изменяются т а к ж е адреса чисел, участвующих в вычислениях.
Пример 1. Вычисление таблицы значений квадратов членов арифметической прогрессии с запоминанием во внешней памяти.
Пусть требуется вычислить квад раты членов арифметической
Ц И К Л И Ч Е С К И Е П Р О Ц Е С С Ы , З А В И С Я Щ И Е О Т П А Р А М Е Т Р О В 113 прогрессии от нулевого до N-ro включительно и запомнить их во внешней памяти. Выделим оперативные ячейки
со, «0 + 1, со+ДГ, (28)
в которые поместим последовательно вычисляемые квадраты . После окончания вычислений всех кв ад р ато в произведем пере
сылку кодов из ячеек (28) внутреннего З У на места с номерами г, г + 1, г + 2, . . . , г + N внешнего З У на р -й участок.
Вычисления естественно разбиваю тся на N + 1 цикл: в п-м цикле вычисляется и зап оминается кв а д р а т п-го члена прогрес
сии а + (п — 1)с.
Воспользуемся программой 9, которую несколько видоизме
ним: опустим вторую команду — печать вычисленных к в а д р а тов чисел, а первой ком анде придадим вид, обеспечивающий з а поминание (а + (п — 1)б')2 в ячейке со + N, т. е.
X «1 а1 со -f - N
Д л я того чтобы вычисленная величина (а + (п — 1 ) с ) 2 па /г-м цикле пе бы ла вытеснена получаемым результатом на (п + 1)-м цикле, дополним п рограм м у ком андам и
— N — 1 + <0 + 1 (>)
к — N + o - f - 2 <» + 1
*
к + <о + N о, + 7V— 1
Введем д ля приведенной группы ком анд к— N— 1 к си м волическую ком анду группового сдвига «ГС»:
Г С с» + 1 N 0>
выполняю щ ую сдвиг содержимого ячеек со -f 1, . . . , со + N на одну ячейку влево. Н ачал ь н ое заполнение ячеек со, со + 1, со + N.
безразлично. В резул ьтате N сдвигов величины о к а ж у т с я соот
ветственно в ячейках (28).
8 З а к . 11G6. Э л ем ен ты п р о гр а м м и р о в а н и я
114 Э Л Е М Е Н Т А Р Н О Е П Р О Г Р А М М И Р О В А Н И Е [ Г Л . III
Д л я пересылки полученных результатов во внешнее З У вве
дем в п рограмму команды
В а Р со -|— 1 г + 1
В о 3 о) -|- N
Получим программу 18.
П р о г р а м м-а 18
Ч н с л а К о м а н л ы
«1 а к Г С СО —f— 1 N Сл)
«2 с к 4 - 1 X «1 «1 со -f- N
«3 a -f- Nc к 4 - 2 + «1 «2 «1
(0 а2 * 4 - 3 < а. «3 к
со —{—1 (а + сУ к 4 - 4 В а Р СО 4 ~ 1 г 4-1
• к -j- 5 Во 3 СО 4 ~ N
0) N (a - f - N c) 2 /г 4* G ост.
К ом ан ды в пашей программе выполняют следую щ ие ф у н к ции: ком ан да к 4- 2 п одготавливает следующий член а р и ф м е т и ческой прогрессии; ком анда к 4- 1 в каж дом цикле вы числяет искомую величину к в ад р ата в одной и той ж е «стандартной»
ячейке со + N\ к обеспечивает запоминание полученного р е з у л ь т а т а — его «высылку» из стандартной ячейки. Эти ком анды могут быть переставлены местами при н ад л е ж ащ ем их и змене
нии и при подборе соответствующего начального заполнения ячейки а ь То ж е построение программ возможно при вычислении таб л и ц любых других функций для последовательно вычислен
ных значений аргументов.
Пример 2. Вычисление значений многочлена. Пусть
f ( x ) = { . . . [(а0х + &i) х -f- а 2\ х -f- . . . + # л_ 1} х - \ - а п. (29) Р ассмотрим п рограмму вычисления многочлена по схеме Горнера, приведенную в § 1. Все команды этой программы (про*
Ц И К Л И Ч Е С К И Е П Р О Ц Е С С Ы , З А В И С Я Щ И Е О Т П А Р А М Е Т Р О В 1 1 5
грам м а 3) с нечетными номерами, за исключением первого, оди
наковы и имеют вид
X 0) р (0
Вычисления по ф ормуле (29) можно разби ть на ряд циклов, в ка ж д о м из которых происходит умножение х на соответствую
щую скобку и прибавление соответствующего коэффициента a L.
Н ул ев ая скобка равна а0, в связи с чем д ля обеспечения циклич
ности работы вычисляемое значение скобки будем помещать в ячейку, содерж ащ ую ао- Тогда вычисления на {к + 1)-м цикле могут быть выполнены теми ж е ком андами, что и на к-м, если коэффициент flfc+i будет помещен в ячейку, в которой находился коэффициент а к.
В связи с этим д ан ны е будем р а зм е щ а ть следующим о б р а зом. Коэффициенты многочлена д0, « ь •••, а п разм естим в раб о
чих ячейках а, а + 1, . . . , а + п, а величину х поместим в ячейку (5. В первом цикле програм м а вычислений будет иметь вид
W + 1 N + 2
Д л я обеспечения цикличности введем команды
+ а + 2 а + 1
+ OL - f~ Н a -j- п — 1
или команду
Г С c t - f - 2 а— 1 a - f - 1
выполняющую сдвиг коэффициентов на одну ячейку влево и тем сам ы м подготовку сод ерж ан ия З У к выполнению следующего
цикла.
8*
X а Р а
+ а ос - f - 1 а
116 Э Л Е М Е Н Т А Р Н О Е П Р О Г Р А М М И Р О В А Н И Е [гл. ИГ Д л я выяснения окончания расчетов воспользуемся тем, что число циклов зара н е е известно и равно числу п (его мы поме- стнм в ячейку З У (Зі). Д л я отсчета числа выполненных циклов введем счетчик — ячейку р2, в которую сн ач ала поместим нуль, а в ячейку З У (З3 поместим единицу для счетчика. П р о г р а м м а ц и к ла дополнится командами
+ р2 Рз ОlJ2
N + 4 Р2 Pi N
первую из которых поместим в начале цикла, а вторую — в конце.
Получим программу.
П р о г р а м м а 19
Ч и с л а К о м а и д ы
а Ло N +
Рг Рз
р2a -J- 1 а , N + 1 у/ \ а
Р
а•
А Н - 2 + а а -}— 1 а
а -j- п (1п N + 3 Г С а -f- 2 п — 1 а + 1
Р
X N + 4 <Рг
Pi NР.
п N + 5 ост.Рг
0Рз 1
В отличие от программы, где ком анда ГС (нлн соответствую
щ а я группа ком анд переноса) выполняла функцию запоминания последовательности результатов, получаемых в стандартной ячейке, здесь эта ком анда ( или соответствующая группа ко
манд) производит засы лку данных (коэффициентов) из после
довательности в стандартную ячейку а + 1.
К оманду ГС при н ад л е ж а щ е м ее изменении можно переста
вить с ком андами N-+- N 2.
§ 4] Ц И К Л И Ч Е С К И Е П Р О Ц Е С С Ы , З А В И С Я Щ И Е О Т П А Р А М Е Т Р О В ' 117 П рограм мы приведенных примеров о б л а д а ю т тем недостат
ком, что в них имеет место непроизводительный перенос после
довательности величин в ка ж д ом цикле, на что расходуется машинное время и ячейки ЗУ. С увеличением сложности задач ф актическая перестановка величин в ячейках З У мож ет о к а
заться весьма затруднительной. Вместе с тем при построении программ для громоздких зад ач приходится считаться так ж е и с ограниченностью памяти машины.
При наличии в наборе элементарны х операций ком анды пере
адресации т ак ая перестановка величин д л я построения цикли
ческих программ не об язательна.
Вместо перестановки величин, располож енны х в определен
ной последовательности, достаточно к н ачалу нового цикла изме
нит!) адреса команд, по которым производится выборка величин из памяти пли зас ы л к а результатов в некоторую последователь
ность ячеек.
Таким образом, з а д а в в машину начальны й вид циклической программы, последнюю дополняю т ком андами, подготавливаю щими их состояние к повторному выполнению цикла, — машина не только выполняет команды , но и подготавливает их д ля по
следующего выполнения.
В аж ное значение при этом приобретает вопрос распределе
ния памяти.
Величины, участвую щие в вычислениях, нужно распределить так, чтобы вычислительный процесс на отдельных этап ах — цик
лах мог быть выполнен по программам, отличаю щ имся меж ду собой только тем, что один или несколько адресов каж дой из этих программ изменяется в зависимости от номера цикла по закону
1\1 — сс —|— ip,
где i— номер цикла, а — начальное значение ад реса (м ожет быть разным д ля различных ад ресов), р— некоторая константа,, один аковая д ля всех переменных адресов. Т ак и е процессы при
нято н азы вать ц и к л и ч е ск и м и процессами, з а в и с я щ и м и от п а р а метра i.
Теперь отдельный цикл вычислений в отличие от и терацион
ного цикла долж ен быть дополнен ком ан дам и переадресации, изменяющ ими соответственным образом переменные адреса про
граммы. При этом, если число циклов з а р а н е е известно, д ля выяснения окончания расчетов мож ет быть использована пере
менная ком ан да цикла.
После окончания циклического процесса в случае, когда по данной программе возмож ны вычисления в будущем, необхо
димо предусмотреть восстановление исходного состояния
118 Э Л Е М Е Н Т А Р Н О Е П Р О Г Р А М М И Р О В А Н И Е [ Г Л . III
ком ан д, т. е. приведение переменных команд к состоянию, исход
ному д л я первого цикла.