
книги из ГПНТБ / Михельсон В.С. Элементы вычислительной математики учебное пособие для электроприборостроительных техникумов
.pdfявляется в программе восьмой, то она попадет в ячейку М + 7, по этому в третьем адресе команды условного перехода (36) записано
М+7.
Из первого столбца видно, что после адреса М+ 7 записан ад рес М+10. Следует помнить, что адреса — четырехзначные восьме ричные числа. Поэтому для облегчения перехода от условных адре сов к истинным необходимо все числа, прибавляемые к буквенным изображениям адресов, писать в восьмеричной системе.
Когда программа составлена в условных адресах, можно ее пере писать в истинных (числовых) адресах. Для этого нужно выбрать числовое значение для каждой буквы, указанной в адресах команд программы. Если взять в рассмотренном примере Л = 0061, 5=0066, С=0074 и М=2305 и в каждой команде записать числовые значения адресов, то получим программу, составленную в начале параграфа.
Составленную программу можно записать, использовав меньшее
число ячеек для хранения промежуточных результатов. |
|
|||
м |
02 |
Л+4 |
л + з |
5 |
|
|
|
|
|
М+1 |
03 |
В |
в |
В |
М + 2 |
36 |
Л+1 |
в |
М +7 |
М +3 |
02 |
Л+4 |
Л+2 |
В |
М + 4 |
03 |
В |
В |
5+1 |
М +5 |
03 |
в |
5 + 1 |
| С+1 |
М +6 |
33 |
0000 |
0000 |
0000 |
М +7 |
01 |
л |
Л+4 |
5 |
М+10 |
03 |
Л+4 |
Л +4 |
я+1. |
М+11 |
04 |
В |
5+1 |
с |
М+12 |
33 |
| 0000 |
0000 |
0000 |
2 4 0
Пр и м е р .
Составить программу в условных адресах вычисления функции
|
|
х 4- ах + Ьх2 |
при |
(с — х ) 2 |
> d. |
||
/(*) = |
(с — х ) 2 |
|
|
|
|
||
х — ab > |
при |
(с — х) 2 |
< d, |
||||
|
|
||||||
|
|
abc, |
при (с — х) 2 |
— d. |
|||
Р е ш е н и е . |
Исходные данные а, |
Ъ, с и d разместим в ячейках |
|||||
А, А+ 1, А+ 2, Л+З, для значения х отведем |
ячейку А + 4. |
||||||
Блок-схема |
алгоритма имеет следующий |
вид: |
|
6. Прекратить |
Д а' |
|
|
вычисления |
|
|
|
|
1 |
|
|
7. |
Вычислить |
8. |
Вычислить |
|
х-\-ах-\-Ьх2 |
||
|
(с—х) 2 |
|
х—аЬ |
|
|
|
|
|
1 |
|
i |
9. |
Прекратить |
10. |
Прекратить |
вычисления |
вычисления |
2) |
Согласно |
этой |
схеме мы должны: |
1) вычислить Д= (с—х )2\ |
||||
проверить, |
равно |
ли Д числу d; |
3) вычислить произведение abc\ |
|||||
4) |
проверить, больше ли Д числа d; 5) |
вычислить значение |
х + ах + Ьх2 |
|||||
(с — xf |
||||||||
и 6) вычислить значение х—ab. |
|
|
||||||
|
Д, ab, Ьх, а+bx, ах+Ьх2 |
|||||||
|
Для промежуточных результатов с—х, |
|||||||
и х+ах+Ьх2 |
отведем ячейки £ + 1, |
5+ 2, |
В + 3, В+4, |
5+ 5, 5 + 6, |
||||
5+ 7; для итоговых результатов — ячейки С, С+1 и С+2. Для |
ко |
|||||||
манд программы отведем ячейки, начиная с адреса Т. |
Значение |
Д |
||||||
вычисляется командами |
|
|
|
|
||||
|
|
02 |
А+ 2 |
Л+4 |
5+1 |
|
|
|
|
|
03 |
5+1 |
5+1 |
5 + 2 |
|
|
|
|
Эти команды будут заданы в ячейках Т и Т + 1. |
|
|
|||||
|
Чтобы проверить, равно ли Д числу d, выполняется команда |
|
||||||
|
|
75 |
л + з |
5 + 2 |
Т0 |
|
|
Если Д ф d, то будет выполняться команда, которая будет по мещена в ячейке Г0; если A = d, то — очередная команда.
Так как при A= d требуется вычислить произведение abc, то сле дующими командами должны быть
03 |
л |
Л+1 |
5 + 3 |
03 |
В+3 |
Л +2 |
С+2 |
33 |
0 0 0 0 |
0 0 0 0 |
0 0 0 0 |
Для этих команд отводятся ячейки Г+3, Г+4 и Т+5.
Теперь мы должны проверить, |
больше |
ли |
Д числа d, поэтому |
|||||
применим команду |
|
|
|
|
|
|
|
|
3 6 |
л + |
з |
В + 2 |
|
|
|
|
|
Эта команда будет помещена в ячейку Г+6. Она должна выпол |
||||||||
няться, если Д + + поэтому в рассмотренной |
выше |
команде 75 |
адрес |
|||||
Т0 равен Т+6. |
|
|
|
|
|
из |
ячейки |
Г,, в |
Если A>d, то управление передается команде |
||||||||
противном случае — команде в следующей ячейке, т. е. |
в Г+7. |
|
||||||
При Д< d вычисляется х—ab, |
поэтому |
включаем |
в программу |
|||||
команды |
|
|
|
|
|
|
|
|
02 |
Л+4 |
В+3 |
|
С+) |
|
|
||
33 |
0000 |
0000 |
|
0000 |
|
|
||
Они помещаются в ячейках Г+7 и Г+10. Остается записать ко- |
||||||||
|
х + ах + Ьх2 |
|
|
|
|
|
|
|
манды, вычисляющие --------т------- : |
|
|
|
|
|
|||
03 |
А+1 |
|
Л+4 |
|
|
5 + 4 |
|
|
01 |
А |
|
5 + 4 |
|
|
5 + 5 |
|
|
03 |
В+5 |
|
Л +4 |
|
|
5 + 6 |
|
|
01 |
В+6 |
|
Л +4 |
|
|
5 + 7 |
|
|
04 |
5 + 7 |
|
5 + 2 |
|
|
С |
|
|
33 |
0000 |
|
0000 |
|
|
0000 |
|
|
Э^и команды задаются в |
ячейки Г+11, |
Г+12, Г+13, Г+14, |
||||||
Г+15, Г+16. Таким образом, |
Г| = Г+11, Итак, |
программа вычисле |
||||||
ния значения функции |
}{х) имеет |
вид: |
|
|
|
|
|
24о
Адрес ячейки, |
Код |
в которой зада |
операции |
ется команда |
|
т |
02 |
7+1 |
03 |
7 + 2 |
75 |
7 + 3 |
03 |
7 + 4 |
03 |
7 + 5 |
33 |
7 + 6 |
36 |
7 + 7 |
02 |
7+10 |
33 |
7+11 |
03 |
7+12 |
01 |
7+13 |
03 |
7+14 |
01 |
7+15 |
04 |
7+16 |
33 |
I адрес |
II адрес |
Л+2 |
/1+4 |
В + 1 |
в+1 |
/4+3 |
В+2 |
А/1+ 1
В+3 |
/4+2 |
0000 |
0000 |
/4+3 |
В+2 |
Л+4 |
В+3 |
0000 |
0000 |
71+1 |
/1+4 |
ЛВ+4
В+5 |
Л+4 |
В+6 |
Л+4 |
S+7 |
В+2 |
0000 |
0000 |
IIIадрес
в+1
В+2
7 + 6
В+3
С+2
0000
7+11
С+1
0000
В+4
В+5
В+6
В+7
С
0000
244
В составленной программе мы пользовались семью ячейками для записи промежуточных результатов. Так как эти результаты не нуж но хранить до конца вычислений, то можно ограничиться только двумя ячейками с адресами В+1 и В+ 2.
А дрес ячейки |
Код |
операции |
т02
т+\ |
0 3 |
Т+2 |
75 |
Т + 3 |
03 |
Г+4 |
0 3 |
Г + 5 |
33 |
Г + 6 |
36 |
Г +7 |
02 |
Г + 1 0 |
33 |
Г+11 |
03 |
Г+12 |
01 |
Г + 13 |
0 3 |
Гадрес
А+ 2
В+ 1
Л+ 3
А
В+2
0 000
л + з
А + 4
0 0 0 0
А+ 1
А
В+2
11адрес
/4 + 4
В+1
В+1
А+1
Л + 2
00 00
В+1
В+2
0 0 0 0
А +4
В+2
/4 + 4
Ш адрес
В+1
В+1
7’+ 6
В+2
С+2
0 0 0 0
Г+11
С+1
0 0 0 0
В+2
В+2
В+2
—245
|
|
|
|
Продолжение |
Г+14 |
01 |
£ + 2 |
А+4 |
£ + 2 |
Г+15 |
04 |
£ + 2 |
£+1 |
С |
Г+16 |
33 |
0000 |
0000 |
0000 |
Таким образом, удалось более экономно использовать внутрен нее запоминающее устройство, что особо важно при составлении больших программ.
§4. Программирование циклических процессов
Врассмотренных примерах составлялись программы, позволяю щие по заданным значениям параметров найти одно значение иско мой величины.
Особенно эффективно можно использовать электронную вычис
лительную машину, когда необходимо производить многократные вы числения по одним и тем же формулам. При каждом повторении вычислений в формулах меняются только значения коэффициентов и неизвестных. Арифметические действия и последовательность их выполнения остаются без изменений. Процесс многократного повто рения одних и тех же команд в программе называется циклическим, а сами команды — циклом.
П р и м е р . Составить программу для вычисления Ьп (п — це лое положительное число).
Для вычисления Ьп будем последовательно вычислять все про межуточные степени: Ь2, Ь3 ........Чтобы машина прекратила вычисле ния после нахождения Ьп, будем все время сравнивать показатель степени очередного числа b1 с числом п. Для удобства этот пока затель степени обозначим через р,-, т. е. р1= 1, р2= 2 ,.... Pi—i. Прог рамма должна быть составлена таким образом, чтобы машина вы
числяла Ь1 и останавливалась только в том случае, если |
р, = и. Если |
|
же Pi<n, то машина должна |
начать вычислять Ь*+1= Ь1 |
■Ь. Из ска |
занного следует, что задача |
разбивается на следующие 5 частей |
— 246
Для выполнения первой части числа |
b, п, 1 и р\ = \ |
задаем в |
||
ячейки А, А + 1, А +2 и /4+3. Команды программы |
будем |
задавать |
||
в ячейки С, С+1, .... |
|
|
i |
будем |
Получаемые во второй части промежуточные степени Ь |
||||
последовательно задавать в ячейку /4 + 4. |
Поэтому |
в этой |
ячейке |
|
будут последовательно заданы числа Ь, |
й2, ..., Ь?. |
Пусть |
в этой |
ячейке находится очередная степень bK Чтобы перейти к следующей степени, нужно это число умножить на число Ь, т. е. на число из ячейки А. Полученное произведение ЬЧл —Ь‘ ■b нужно задать в эту же ячейку. Чтобы таким образом можно было получать различные степени Ь, в ячейке с адресом /4+ 4 еще до начала процесса умно жения должно находиться само число Ь. Поэтому нужно еще ввести число Ъ в ячейку /4+4, тогда вторая часть блок-схемы выполняется при помощи команды
|
03 |
/4+4 |
А |
/4+4 |
Эта команда задается в ячейку С. |
|
|
||
После умножения Ь1 |
на b у полученного числа Ь‘+> показатель |
|||
степени |
на единицу больше, чем у Ь1. |
Поэтому для получения оче |
||
редного |
числа pi+i нужно к числу р< (это число находится в ячейке |
247 —
с адресом Л+ 3) прибавить единицу (которую мы специально для
этого задали в ячейку Л+ 2). Для |
этого |
используется команда |
|
01 |
Л +3 |
Л+2 |
Л +3 |
Теперь мы должны определить, п больше Pi или нет. Для этого выполняется команда
|
36 |
Л + 3 |
|
|
Л + 1 |
с |
|
Если n=pi, то будет выполняться следующая команда. Чтобы |
|||||||
остановить теперь машину, должна выполняться команда |
|
||||||
|
33 |
0000 |
|
|
0000 |
0000 |
|
Если «>Рг, то управление |
подается команде в ячейке С и вы |
||||||
числяется следующая степень числа Ъ. |
|
|
|||||
Таким образом, искомая программа имеет вид |
|
||||||
Адрес ячейки, |
|
Код |
|
|
|
|
|
в которой зада |
операции |
I |
адрес |
11 адрес |
III адрес |
||
ется команда |
|
|
|
|
|
|
|
с |
|
03 |
Л +4 |
Л |
Л+4 |
||
С+1 |
|
01 |
л |
+ |
з |
Л +2 |
Л +3 |
С+2 |
|
36 |
л |
+ |
з |
Л+1 |
С |
С+3 |
|
33 |
0000 |
0000 |
0000 |
В этом примере при каждом выполнении цикла адреса команд, входящих в цикл, не меняются, так как все данные берутся из од них и тех же ячеек А, Л+ 1, А +2, Л+3, А+4.
В следующем примере будет рассмотрена задача, в которой при каждом цикле приходится задавать результаты в различные ячейки.
П р и м е р . Составить таблицу квадратов чисел от 1 до 5. Наиболее простой способ состоит в том, чтобы ввести в маши
ну пять чисел от 1 до 5 и возвести' каждое из них в квадрат. Для этого в ячейках А, Л+ 1, А+2, Л +3 и Л+ 4 задаем числа 1, 2, 3, 4, и 5.
Программа для составления искомой таблицы имеет вид
— 248 ->
Код |
I адрес |
II адрес |
III адрес |
операции |
|||
0 3 |
А |
А |
А |
0 3 |
А+1 |
А+1 |
А + 1 |
0 3 |
А + 2 |
А+2 |
А+2 |
0 3 |
/ 4 + 3 |
А + 3 |
А+3 |
0 3 |
/ 4 + 4 |
А+4 |
А+4 |
После выполнения последней команды в ячейках А, А + 1, А+ 3 |
|||
н А + 4 будут заданы искомые квадраты 1, 4, 9, |
16 и 25. |
Итак, для получения пяти квадратов мы пользовались програм мой из 5 команд и предварительно ввели в машину пять чисел.
Если бы требовалось составить таблицу квадратов целых чисел, например от 1 до 1000, то программа, составленная по этому ме тоду, содержала бы 1000 команд и предварительно пришлось бы ввести в машину 1000 чисел, т. е. в запоминающее устройство маши ны нужно было бы задать 2000 чисел.
Однако можно значительно сократить объем программы. Для этого нужно так составить программу, чтобы число ее команд не зависело от количества чисел, возводимых в квадрат, и не нужно было бы предварительно вводить в машину все числа, квадраты которых мы хотим получить.
Сделаем это в следующем примере.
Пр и м е р . Составить таблицу квадратов целых чисел от I до п. При составлении дальнейших программ мы будем пользоваться командами сложения команд (22) и условной передачи (36). Адре сами этих команд являются адреса ячеек, в которых находятся чис ла и другие команды программы. Поэтому при записи программы мы будем слева от каждой команды записывать адрес ячейки, в ко
торой задается эта команда.
Вместо того, чтобы вводить в машину все числа от 1 до я, в программе должна быть команда, при помощи которой в определен ной ячейке можно будет по мере надобности получать последова тельно все числа от 1 до п. Для получения чисел от 1 до п будем пользоваться ячейкой А+1, в которую сначала зададим 0, а в ячейку
249