книги из ГПНТБ / Михельсон В.С. Элементы вычислительной математики учебное пособие для электроприборостроительных техникумов
.pdfА +2 зададим 1. Если |
машина |
будет |
многократно выполнять |
|
команду |
_____________________________________ |
|||
|
01 |
<4+1 |
А + 2 |
<4+1 |
то к числу, находящемуся в ячейке А + 1, т. е. к нулю, будет много кратно прибавляться единица из ячейки А + 2, а результат опять записываться в ячейку А+ 1. Эта команда будет первой в программе.
После того как очередное число задается в ячейку Л+ 1, оно должно возводиться в квадрат. Эти квадраты будем задавать в ячейку В. Поэтому второй должна быть команда умножения
03 |
<4+1 |
<4+1 |
В |
При помощи этих двух команд машина может вычислить таб лицу квадратов любого числа последовательных целых чисел, если заставить ее циклически повторять эти команды. Так как после каж дого цикла вычисляется значение одного квадрата и требуется вы числить значение п квадратов, то циклы должны повториться ров но п раз. Чтобы составить требуемую программу, рассмотрим блок-
схему алгоритма решения задачи.________________________________
1. Задать в машину числа а0 =0, п, 1
4
2. Увеличить числа а |
на единицу: вычислить |
а 1 = °i- 1 + 1
4
3. Вычислить а?
4
4. Проверить: 1) п больше агили 2) п равно at
п больше а,- |
| |
п равно щ |
|
4 |
|
5. Окончить вычисления
250
На блок-схеме видно, что вычислительный процесс разветвляется. Если п больше очередного составленного числа а,-, это значит, что еще не составлена вся таблица квадратов, поэтому необходимо вы числить следующее число Д(+ 1 и возвести его в квадрат. Если же вычислены все п квадратов, то нужно остановить машину. Это раз ветвление вычислительного процесса, как мы знаем, можно осуще ствить при помощи команды 36.
Для хранения вычисленных квадратов мы отведем ячейки, на чиная с адреса В. По мере их вычисления они будут последователь но задаваться в ячейки В, В+ 1, В + 2 и т. д.
На основании приведенной блок-схемы составим требуемую программу. В ячейках Л, Л+ 1, А + 2 задаем числа л, 0 и 1. В ячейке -4 + 1 будут последовательно образовываться целые числа от 1 до п.
Программу будем задавать, начиная с ячейки С. |
|
||
Чтобы вычислить а 1+1= а, + 1, |
используем команду |
||
01 |
Л+1 |
А+2 |
-4+1 |
Квадрат этого числа нужно задать в ячейку В, поэтому следую щей выполняется команда
03 Л+ 1 Л+1 В
Эта команда будет задана в ячейку С + 1.
Чтобы квадрат следующего числа был задан в ячейку В+1, не обходимо увеличить третий адрес этой команды на единицу. Для этого в ячейку -4+3 задаем константу переадресации 6=
=000 000 00 000 000 000 00 000 000 000 00 000 000 001.
Чтобы при помощи этой константы менять третий адрес команды 03, нужно выполнить команду «сложение команд».
2 2 С+1 Л +3 С+1
251
В каждом цикле, когда машина выполнит эту команду, третий адрес команды 03 увеличится на единицу, принимая последователь ные значения В + 1, В + 1, В + 3, ...
Переходим к четвертому этапу блок-схемы.
Мы должны проверить, вычислены ли все п квадратов, т. е. рав но ли п последнее составленное число. Для этого выполняется команда
|
36 |
А+ 1 |
.4 |
С |
|
|
т. е. |
Если число из ячейки А, т. е. |
п, больше числа из |
ячейки |
Л+ 1, |
||
то управление |
передается |
команде из |
ячейки |
С, т. е. |
цикл |
|
начинается сначала, и машина начинает вычислять следующее чис
ло йг+l. |
/ |
Если n=ai, |
то будет выполняться следующая команда. Так как |
в этом случае мы хотим остановить машину, то должна исполниться команда
|
33 |
0 0 0 0 |
0 0 0 0 |
0 0 0 0 |
|
Таким образом, программа имеет вид |
|
|
|||
Адрес ячей |
|
|
|
|
|
ки, в которой |
Код операции |
I адрес |
II адрес |
III адрес |
|
задается |
|||||
команда |
|
|
|
|
|
С |
|
01 |
Л+ 1 |
Л +2 |
А + 1 |
С+1 |
|
0 3 |
А + 1 |
А + 1 |
В |
С+2 |
|
22 |
С+1 |
Л +3 |
С+1 |
с + з |
|
36 |
/1+1 |
А |
с |
с + 4 |
|
33 |
0 0 0 0 |
0000 |
0 0 0 0 |
252 —
В ячейке |
Задается число |
с адресом |
Ап
Л+1 |
0 |
Л + 2 |
1 |
Л +3 |
k |
ВI2
В+ 1 22
На этом примере мы познакомились с одной важной особенно стью команды 36. Она позволяет образовывать циклы.
В программе может быть несколько различных циклов, что по зволяет во много раз сократить количество команд в программе.
Составленной программой можно пользоваться при изменении числа п, при этом все команды остаются без изменения, а в ячейку А каждый раз задается соответствующее значение числа п.
Рассмотрим еще один пример использования команды «сложение
команд». |
числа С], с2, |
с3 |
и с4. |
Требуется |
составить |
|
П р и м е р. Заданы |
||||||
программу для нахождения их суммы. |
|
|
|
|
||
Пусть заданные числа расположены в ячейках с адресами А+ 1, |
||||||
А + 2, Л+ 3 и А +4, тогда такая программа имеет вид |
|
|||||
Код операции |
I адрес |
| |
11 |
адрес |
III адрес |
|
01 |
Л + 1 |
|
|
Л+2 |
Л + 1 |
|
01 |
Л + 1 |
|
Л + 3 |
л + |
1 |
|
01 |
Л + 1 |
|
|
Л + 4 |
Л + 1 |
|
33 |
0000 |
|
|
0000 |
0000 |
|
253
Команды 1, 2 и 3 отличаются друг от друга только своими вто
рыми адресами.
Если по этому же методу составить программу для сложения п чисел, расположенных в ячейках с последовательными адресами, то она будет состоять из п—1 команд сложения, которые также отличаются друг от друга только своими вторыми адресами. Чтобы уменьшить число команд в такой программе, можно не включать в нее все команды сложения, а образовывать их в машине путем из менения второго адреса только одной команды сложения. Для этого используем команду «сложение команд».
Вычисление суммы с, + с2+ с3+ .. .+ с„ надо начинать с посте пенного вычисления всех промежуточных сумм:
Sl = C j , S 2 = Cj + c 2> S 3 = C i С 2 + С3, . . . , *S(-=Ci-|—С2—|—•• •+£/» •• •
Чтобы получить очередную сумму S,-, нужно к уже вычислен ной сумме S,_1 прибавить с,-.
Число слагаемых, входящих в Si, обозначим через р,. Переход от S,-_i к Si связан с одним сложением. Искомая программа состоит из 5 частей:
Пусть числа сь ..., сп задаются в ячейках А + 1, А + 2 ,..., А + п, в ячейках К, К+ 1, К + 2 зададим числа п, 1 и I. Константу переад
254
ресации К =000 000 00 000 000 000 00 000 000 001 00 000 000 000 зададим
в ячейку К+З. Для команд отведем ячейки В, В+ 1......
Суммы Si будем |
задавать в ячейку Л + 1, числа р,- — в ячейку |
|||
К+2. |
|
|
как |
Pi = l. |
Вначале в эту ячейку задается единица, так |
||||
Искомая программа имеет вид |
|
|
|
|
Код операции |
I адрес |
II адрес |
III |
адрес |
01 |
Л+1 |
Л+2 |
л + 1 |
|
22 |
в |
/(+ 3 |
|
в |
01 |
к + 1 |
а:+2 |
К + 2 |
|
36 |
К + 2 |
к |
|
В |
33 |
0000 |
0000 |
0000 |
|
Если сумма всех п слагаемых еще не вычислена, то команда (36) передает управление команде в ячейке В, т. е. первой команде прог раммы. По этой команде к сумме, находящейся в ячейке Л+ 1, до бавляется новое очередное слагаемое, так как в предыдущем цикле команда (22) изменила ее второй адрес.
Цикл будет повторяться до тех пор, пока не будет вычислена сумма всех п слагаемых.
Из приведенных примеров видно, что, подбирая различные кон станты переадресации и используя циклы с командой «сложения команд», можно составлять весьма компактные программы.
Втаких программах количество команд не зависит от числа арифметических операций, осуществляемых ими.
Врассмотренных примерах мы образовывали цикл, заранее зная, сколько раз он должен повториться. Но существуют задачи, в кото
рых этого сделать нельзя, к ним относятся, например, задачи с итерационным методом счета. С этим методом мы уже встречались при нахождении решения системы линейных уравнений и корней трансцендентных уравнений.
П р и м е р . Составить программу для извлечения квадратного корня из числа N.
255
Р е ш е н и е . |
Для извлечения квадратного корня из числа можно |
||||||
пользоваться формулой |
|
|
|
|
|
||
|
|
|
|
х, |
N |
|
|
|
|
*/+1 |
— + — . |
|
(4) |
||
|
|
|
2 |
~ 2xt |
|
||
Она позволяет по приближенному значению Xi этого корня на |
|||||||
ходить более точное приближение |
|
и- До каких пор нужно вычис |
|||||
лять числа Хо, х и *2, • |
• •> зависит |
|
от того, с какой |
точностью |
надо |
||
получить значение V |
N. |
|
|
|
|
|
|
Если у двух последовательных приближений, найденных по этой |
|||||||
формуле, слева несколько цифр |
|
подряд соответственно одинаковы, |
|||||
то те же цифры |
будут стоять слева |
и у точного |
значения |
корня. |
|||
Чтобы получить значения корня с точностью до е, нужно вычислять числа Хо, Хи х2, ... до тех пор, пока
К- — *j_i| < е - |
(5) |
За нулевое приближение возьмем, например, x0 =N. Программу, которую мы хотим составить, можно изобразить следующей блоксхемой:
256
Составим программы для выполнения каждой части этой схемы. |
|
1. |
Зададим числа ейN в ячейки Л + 1 и Л+ З. |
2. |
Ячейкой А +2 будем пользоваться для записи вновь вычис |
ленных значений х ,■корня, а предыдущее вычисленное значение Xj_i корня будем записывать в ячейку А. Вычислив новое Xt, записываем его в ячейку с адресом Л + 2, но перед вычислением следующего при ближения Xi+i это найденное приближение х,- будем передавать из ячейки Л+ 2 в ячейку с адресом А.
Для программы отведем ячейку, начиная с адреса В. Так как мы взяли x0 = N, то нужно выполнить команды
|
|
00 |
л + з |
0000 |
|
|
Л +2 |
|
|
|
00 |
Л +2 |
0000 |
|
|
Л |
|
Число |
* ,-1 |
как |
предыдущее значение |
корня будет находиться |
||||
в ячейке А. |
число |
x t |
вычисляется по программе из четырех команд: |
|||||
Тогда |
||||||||
|
|
65 |
Л |
0077 |
|
|
Л+4 |
|
|
|
65 |
Л |
0001 |
|
|
Л +5 |
|
|
|
04 |
Л +З |
Л +5 |
|
Л+6 |
|
|
|
|
01 |
Л +4 |
Л+6 |
|
Л +2 |
|
|
Они задаются в ячейках В+ 2, В+3, |
В + 4, Д+5. |
|
||||||
В ячейке Л +4 |
образуется число |
■ |
1 |
, |
в ячейке |
Л+5- - число |
||
|
|
|
N |
|
|
|
|
|
2х,_ь в ячейке Л+ 6—число 2 xi- 1 и |
Xi будет задано |
в ячейку Л+2. |
||||||
Итак, |
в ячейке Л находится число x,_i, |
а в ячейке Л +2 — чис |
||||||
ло Xi.
257
3. Чтобы вычислить разность 6 = Л',—л:,_ь выполняется команда
|
02 |
А+2 |
А |
А+7 |
Эта разность задается в ячейку А + 7. |
|
(5) не выполняется и необходи |
||
4. |
Если е< |
| 61, то неравенство |
||
мо найти следующее приближенное значение корня по формуле (4), |
||||
поэтому при е< |6| |
нужно передать |
|
управление команде, нахо |
|
дящейся в ячейке 5+ 1. |
|
|
||
Таким образом, для выполнения пункта 4 блока-схемы исполь зуется команда «сравнения абсолютных величин».
76 А + 1 А+7 5+1
Если е^|6|, то управление |
передается следующей команде. |
||
5. Для остановки машины выполняется команда |
|||
33 |
0000 |
0000 |
0000 |
Впроцессе работы машины в семи ячейках с адресами от А до
А+ 7 будут заданы следующие числа:
Адрес ячейки |
Число, задаваемое в эту ячейку |
|
А |
предыдущее приближение лгг_ 1 |
|
А+1 |
8 |
|
А+2 |
последующее приближение Х( |
|
А + 3 |
N |
|
Л+4 |
x i - 1 |
|
2 |
||
|
258
Продолжение
А + 5 |
2 x i-i |
N
Л + 6
2'V i
Л+7 6 = x i—xi _ 1
Составленная программа имеет вид
Адрес, в который |
Код |
I адрес |
II адрес |
III адрес |
|
задается команда |
операции |
||||
|
|
|
|||
в |
00 |
л + з |
0000 |
Л+2 |
|
в + 1 |
00 |
А + 2 |
0000 |
Л |
|
В+2 |
65 |
А |
0077 |
Л+4 |
|
В+3 |
65 |
А |
0001 |
Л+5 |
|
В+4 |
04 |
А + 3 |
Л+5 |
Л+6 |
|
В+5 |
01 |
Л+4 |
Л + 6 |
Л +2 |
|
В+6 |
02 |
Л+2 |
Л |
Л+7 |
|
В+7 |
76 |
Л+ 1 |
л +7 |
В+1 |
|
В+10 |
33 |
0000 |
0000 |
0000 |
Итак, для извлечения квадратного корня |
числа |
е й |
N задаются в |
||
ячейках Л+1 |
и Л+ 3, ячейки |
Л+4, ... |
и А + 7 |
используются для |
|
промежуточных результатов, |
девять команд программы задаются |
||||
в ячейках В, |
..., В+10. Значение корня |
задается в |
ячейку А +2. |
||
— 259 —
