• Ешқандай Нәтиже Табылған Жоқ

Вычисление элементарных функций

П р и м е р 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', s0X', 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 «а « 7

X

«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 +

Рг Рз

р2

a -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

ком ан д, т. е. приведение переменных команд к состоянию, исход­

ному д л я первого цикла.