
книги из ГПНТБ / Сафонов, С. Ф. Вычислительная техника в инженерных и экономических расчетах (конспект лекций)
.pdf1 |
2 |
3 |
4 |
5 |
4376 |
5128 |
1011000 |
п т |
Печать целых |
|
|
(130) |
|
чисел |
4377 |
5272 |
1011001 |
ПС |
Печать |
|
|
(131) |
|
содержимого |
4378 |
6296 |
1011010 |
ПК |
Печать команд |
|
|
(132) |
|
|
4379 |
5712 |
1011011 |
ех |
Вычисление |
|
|
(133) |
|
ег |
4380 |
5032 |
1011100 |
дн |
Приведение числа |
|
|
(134) |
|
с плавающей запятой |
|
|
|
|
к виду длинного |
|
|
|
|
числа |
4381 |
6968 |
1011101 |
ск |
Сложение ком |
|
|
(135) |
|
плексных чисел |
4382 |
6992 |
1011110 |
вк |
Вычитание |
|
|
(136) |
|
комплексных чисел |
4383 |
7016 |
1011111 |
ук |
Умножение |
|
|
(137) |
|
комплексных чисел |
4384 7048 1100000 дк |
Деление |
(140) |
комплексных чисел |
в
nmAxH
ncAl0
пкАхН
ехА,вАг
дНА10Аа
ckAi«A2
пкA|OA*j
укА10А1
дк А,вАа
7
[Ai]« рассматривается как целое число, переводится и печатается
[Ai]в печатается в виде 36-раэрядного двоично
го набора нулей и еди ниц
[Aj]e печатается как команда во внешнем коде
ехр (А,)е А2
Число с плавающей за пятой приводится к ви ду длинного числа и результат -> А3
(|A ,li4) + (А*) . А2
([А,Ц4 + 1) + (А *+1 -
. - А2 + 1
(А.) - ([А ,]") А,
(As г Л —(|А,Ц4 | 1) >
-> А2 ! 1
« A i# ) X (А.) -
({А,Ц4+ 1) Х[(А, i 1)
П р о д о л ж е н и е т а б л. V
8
Если |
в разрядах |
ап-:-азг- |
[А,] в |
написанный |
двоичный |
набор |
не совпадает |
ни с од |
ним из кодов операции, то выполняется операция «ис»
Если нормализованное чис ло с плавающей запятой [А)]в>43, то печатается о°, и машина останавливается
Если порядок [А)]в больше 34, печатается оо, ц машина останавливается
Сложения производятся с применением псевдоопера ции «СП»
Вычитания производятся с применением псевдоопера ции &вп»
Умножения и сложения про изводятся с применением псевдоопераций «сп», «уп»
- А4
(fAi]g4) х (Аа -f 1 ) 4 .
+ ([Ai]^4 +[1) X (А,) -
А2 4 I
Деление производится по определению деления кояплекснкх чисел
а -у d/ ас *Т' пи , • ос—ои с + d j" " ~с*~уЖ + * сЧ- d*
Только надо учесть, что
а |
([А,]*4), |
в - |
([A,]i4 + |
1), |
с |
- (A*), |
d - |
(А2 -|- 1) |
|
Операции производятся с помощью соответствующих псевдоопераций
&
со
1 |
2 |
3 |
4 |
4385 |
6544 |
1100001 |
ПИ |
|
|
(141) |
|
4386 |
6600 |
1100010 |
ОП1 |
|
|
(142) |
|
4388 |
|
1100100 |
д т |
|
|
(144) |
|
5
Печать цифровых индексов
Отсылка длинных* чисел
Деление целых чисел
в
пиА^Аг
otAj0A2
дтА]вА2
|
|
|
П р о д о л ж е н и е т а б л . У |
||
|
7 |
|
|
8 |
|
[Aj]e переводится в де |
Перевод и печать произво- |
||||
сятичную систему и пе |
дятся, |
если [Ai]« <1000, в |
|||
чатается |
как индекс |
противном случае |
печатает- |
||
|
|
|
ся «пи» |
|
|
lAilg - |
Ц |
|
|
|
|
1(А2) : [Aile )] - |
Аа |
Если |
[At]o =0, то |
печатает |
|
1 [А2] : [AjJe > - |
3 |
ся оо, и машина останавли |
|||
|
|
|
вается |
|
Эти псевдооперации имеют своеобразное исполнение модифи каций. Команда с псевдооперацией ИД в модификациях К и П используется так, как будто она находится в модификации И. Например, если требуется перевести число из формы длинного числа, находящегося в 110 ячейке, в форму с плавающей запя той, то это можно сделать командой
НД ПО К 300.
Результат окажется в 300 ячейке ОЗУ в форме с плавающей за пятой. '
В модификации Н псевдооперация берет содержимое первого адреса, и делает его адресом обрабатываемой информации.
Команда с псевдооперацией ДН в модификациях выполняет ся обычным образом.
Особенности использования команд для обработки чисел в той или иной форме представления. Все машинные арифметиче ские операции обрабатывают числа в форме с фиксированной запятой. Машинные операции сложения и вычитания в форме с фиксированной запятой выполняют те же самые действия, что и в форме целых, т. к. форма целых отличается от формы с фик сированной запятой масштабным множителем 2. Например, числа
36
00,1010100...0
36
00101010...0
отличны друг от друга в 234.
Если основание 2 с показателем степени 34 считать порядком масштабного множителя, то легко сообразить, что операцией сложения и вычитания форм с фиксированной запятой можно складывать и вычитать числа в форме целых, ведь при сложении и вычитании мантисс чисел их порядки не корректируются, если, конечно, не проводится нормализации мантисс. При сложении и вычитании чисел в форме целых нормализация вообще не имеет смысла.
Совершенно другое получится при умножении и делении це лых чисел операциями формы с фиксированной запятой. Напри мер, возводя в квадрат операцией умножения целое число 600...010 = 2, получим в результате
00,000...0Ю
00,000...0Ю
00.000...000
потому, что. произведение будет настолько мало, что его невоз можносодержать.в 36-разрядной сетке машины «Наири».
Это следует учитывать при составлении программ для обра ботки, целыхчисел.
5-3657 |
65 |
Для умножения и деления целых чисел используются псевдооперации ут и дт.
При делении целых чисел операций дт — частное есть целое число от деления, например
000...0111 = 000011,
000...010
т. е. [7/2]= 3, где квадратные скобки означают целую часть де ления.
В предыдущем примере при умножении операций ут целого числа самого на себя получился верный результат ООО...ОЮ = 4.
Для того, чтобы программным путем можно было бы учиты вать погрешности, получаемые при таком «целом» делении, в операциях ут, дт предусмотрена после деления посылка остатка от деления в третью ячейку ОЗУ, т. е. операцией деления для пре дыдущего примера выполняется действие
000...0111 = 000...011,
000...0010
а остаток 000...01 пошлется в третью ячейку ОЗУ.
Можно считать, что операцией деления производится получе ние вычета числа по модулю знаменателя, если за вычет прини мать после произведенного деления содержимое третьей ячейки. Действительно, для предыдущего примера
-J- = 1 (mod 2)>
если результат брать из третьей ячейки ОЗУ.
Далее следует постоянно помнить, что при формировании команд сложением или вычитанием их следует складывать как числа в форме целых. Ведь кодовые числа команд при их выпол нении машиной «понимаются» как целые числа. Покажем такое формирование команды примером. Пусть требуется переадресо вать команду Я 30 Я 200 на команду Я 30 Я 201. Это можно сделать следующим образом:
129 Я1 Я1
130Я 30 Я 200 +
спомощью первой ячейки (регистровой), но можно сделать и с помощью непосредственного сложения команды с целым числом
129 С 1 К 130
130 Я 30 Я 200.
Первый случай наиболее приемлем, т. к. в нем формируемая команда изменяется лишь перед своим использованием с по мощью сумматора на исполнительном органе—регистре команд, а не в памяти.
Во втором случае команда формируется в памяти и после ее
66
изменения — если следует ее вновь иметь в первоначальном ви де — потребуется еще одна команда для соответствующей кор ректировки. Этого недостатка лишен метод регистровой ячейки, приведенный в первом примере.
Распределение ячеек ОЗУ производится непосредственно пе ред составлением программы, когда алгоритм задачи и его опе раторная схема составлены.
Некоторые рекомендации на этот счет.
Распределение исходной информации. Адреса исходной ин формации появятся в дальнейшем в адресных частях команд будущей программы. Но выгодно, чтобы адресные части команд были бы длинными числовыми наборами, потому что такая про грамма будет иметь повышенное время ввода с медленно рабо тающих вводных устройств. Отсюда следует, что для размещения исходной информации следует использовать ячейки оперативной памяти, размечаемые небольшими по длине числами, — это как раз будут начальные ячейки ОЗУ.
Размещение исходной информации предпочтительнее в на чальных ячейках оперативной памяти.
Ячейки с размещением в них исходными данными иногда на зываются «стандартными рабочими ячейками». Мы же будем их называть «ячейками исходной информации» или ячейками ИИ.
Нестандартными рабочими ячейками, или в дальнейшем про сто рабочими ячейками, будем называть ячейки оперативной* па мяти, необходимые для временного размещения промежуточных результатов вычислений или накапливающихся конечных резуль татов, которые перед своим выводом на печатающее устройство еще необходимы для вычислительного процесса.
Поскольку рабочие ячейки также будут обозначаться в адрес ных частях команд, то сказанное для ячеек исходной информа ции справедливо и для рабочих ячеек. Для назначения рабочих
ячеек (РЯ) выгодно использовать адреса ОЗУ, |
приведенные в |
|
табл. III (см. приложение). |
' . |
|
Размещение программы. После того, как на |
бланке или про |
сто на бумажном листе выписаны адреса ячеек исходной инфор мации, приступают к составлению рабочей программы, исполь зуя при этом свободные ячейки ОЗУ.
Процесс составления программы — кропотливый процесс, требующий внимания и предусмотрительности,, и не всегда воз можно при этом точно назначать заранее адреса всех команд программы. Для облегчения распределения ячеек команд про граммы иногда используется метод условных адресов, который состоит в буквенной, цифровой или буквенно-цифровой нумера ции ячеек машины, не связанной непосредственно с истинной нумерацией. Он используется на первом этапе составления про граммы, когда по каким-либо причинам затруднительно сразу распределить по действительным адресам команды программы и числовой материал.
5* |
67 |
В условных адресах также удобно составлять СП, если при составлении их предусматривается запись стандартной програм мы в любом месте оперативной памяти машины. Однако для ЭВМ «Наири», в операциях которой возможно безотносительное программирование, метод условных адресов не дает большого эф фекта, и мы не будем им пользоваться в дальнейшем.
Общие приемы составления программ в языке ручного прог раммирования. Составление программ нециклических алгорит мов.
Пусть требуется вычислить функцию
|
I = ат |
при т < 0; |
|
||
! |
, |
ат sin х |
v. |
А |
|
I |
I |
—— |
|
при т > |
0; |
|
|
(10 > |
а > |
1) и (1 г |
т > 0). |
Решающий алгоритм, определяющий процесс вычисления по формуле, состоит из следующих элементарных предписаний:
1. Проверить, справедливо ли равенство /и <0. Если да, то перейти к пункту 2, если нет, — к пункту 3.
2. Вычислить I по формуле
1 - а т.
Перейти к пункту 4.
3.Вычислить I по формуле
^a/n sin jc
т
Перейти к пункту 4.
4. Прекратить процесс.
Анализируя алгоритм на особенности, находим, что в системе команд «Наири» нет операции возведения в степень. Возвести же а в степень т умножением возможно лишь для целых чисел. Тогда вычисления по формуле
/ = С'“
проведем так: вычислим вначале
т In а,
потом
J |
Q m _ g m I n а |
Последнее можно выполнить с помощью псевдооперации ех, которая в командах записывается так: ех А { 0 Аг и возводит чис ло е в степень, записанную в адресе А\. Результат размещается в адресе .А2.
Просмотрев еще раз алгоритм и систему команд машины, находим, что все остальные операции алгоритма выполнимы в языке «Наири». Проводя дальнейший анализ алгоритма на осо бенности, находим, что при появлении в знаменателе числа, близ-
68
кого к нулю, в ЭВМ при делении на это число1произойдет пере полнение разрядной сетки.
Приняв во внимание первую особенность, выбираем форму представления чисел в виде с плавающей занятой, потому что только в этой форме имеются операции In и ех. Малое быстро действие, с которым обрабатывается эта форма, для нас сущест венного значения не имеет из-за краткости вычислительного про-, цесса.
Вторую особенность —.переполнение учтем в |
операторной |
|||
схеме и, в дальнейшем, в программе — анализом |
знаменателя |
|||
на величину, близкую к нулю.. |
|
|
|
|
Составим операторную схему задачи: |
|
|
||
|
|
I |
Л7, |
|
УоАгНъЯз уцНьЯв, |
|
|||
I |
t |
t , |
I |
|
где операторы выполняют такие действия:
Уо — проверяет, действительно ли т < 0, и если это так, то пере
|
дает управление оператору у 4; в противном случае — опе |
|
|
ратору Ль |
|
Я2 |
вычисляет 1 — ат; |
|
печатает результат вычисления; |
||
Я3 |
останавливает машину; |
|
V i |
проверяет, близко ли т к нулю; |
|
Н5 |
печатает, что п= 0; |
|
Яе |
останавливает машину; . |
|
А7 |
вычисляет /= |
ат sin х |
т |
Перейдем теперь к непосредственному составлению программы. Форма представления чисел уже выбрана.
Распределим ячейки ОЗУ. Вспомните, для программирования всегда свободны ячейки: 1,11—15, 29—31, 33—980 (и все это при возможности использования машины в различных режимах).
Для ячеек исходной информации выгодно выбирать малые адреса. Пусть исходная информация разместится в ячейках
30—32:
ЗОЛ
31 т
33 X.
Мы намеренно пропустили 32 ячейку, т. к. она может «портиться» счетным режимом. При обращении к этому режиму в 32 ячейке стандартной программой счетного режима заносится с хорошей точностью число л. (Это можно использовать при программиро вании).
Программируем операторы.
1. Оператор уо
69
53 Я 31 Я — содержимое 31 ячейки посылается в ячейку а2\
35ех ... Я^безотносительный условный переход, если : т ^О . Адреса безотносительной передачи управления проставим в
команде при стыковке операторов. 2. Оператор А\
36 |
In 30 Я |
|
12 In а— 23; |
37 |
УП 31 Я |
12 min а— 12; |
|
38 ЕХ 12 Я |
12 ет1па—42; |
39 ХОЯ — предусмотрительно оставим эту ячейку свободной (хо лостая операция).
3.Оператор Н2.
ЯЯ 12 Я 5 — печатать числа в форме с плавающей запятой из
12 ячейки; , о 2274 Я — возврат печатающей каретки телетайпа в исходное
состояние, перевод бумажной ленты на'одну строку.
4.Оператор Яг-
К— останов машины.
5.Оператор у 4
Я31 Я 24 т-*-24;
ВМ 29 Я 24 (от—а )-^24;
где а число, близкое к «машинному нулю». Продолжаем прог рамму.
е\ ... Я ^ — переход к следующему за у* оператору H i
6.Оператор Я5
о2230 Я — печать символа т
о2250 Я — печать символа =
о2176 Я — печать символа О.
7.Оператор #6
/с — останов машиньи 8. Оператор Л7
И\...П... — переход к вычислению ат (оператор Ai) с последую щим возвратом ко второй команде данного оператора;
sn 33 Я 11 |
—.sin х—>-11 |
|
|
УП 11 |
Я 12 |
— amsinx-+12 |
|
ОД 31 |
Я 12 |
■Qm-s-in * 12 |
|
*А - Н. |
Ш |
|
|
|
одну 39 ячейку |
||
Предусмотрительно оставив в операторе А\ |
|||
свободной для того, чтобы не программировать |
еще раз выра |
жение ат, мы сделали блоком часть программы, занимающую 36—39 ячейки, к которому можно обращаться командой перехо да с возвратом: «Я1...Я...», выиграв в труде и сэкономив в ячей ках памяти.
70
Теперь стыкуем операторы по схеме:
УоА\Н2Яз\ |
I |
i |
|
у ^ ь Я вА7. |
|||
I |
* |
т____________! |
Проставим недостающие адреса в командах |
безотносительного |
||||||||||
перехода и в команде (в операторе Aj) |
обращения к блоку |
вы |
|||||||||
числения ат. |
|
|
|
|
|
|
|
|
|||
Программу разместим, начиная с 34 ячейки, чтобы не делать |
|||||||||||
пустых промежутков в используемых ячейках ОЗУ. |
|
|
|||||||||
34 Я 31 Я |
К - |
где величина а, |
необходимая для анализа |
||||||||
35 ej |
7 Л > |
||||||||||
на переполнение |
в этой программе, опре |
||||||||||
36 In 30 Я |
12 |
Аг |
деляется |
из максимального |
значения |
а= |
|||||
37 УП 31 Я |
12 |
10 (см. условия задачи). |
|
с |
плавающей |
||||||
38 ЕХ 12 Я |
12 |
|
Наибольшее число в форме |
||||||||
39 X ОН |
|
|
запятой не превышает в «Наири» 1018—1 |
||||||||
40 ПП 12 Я 5 ' |
Hi |
Тогда — |
=макс. при т —1 |
и |
а —10 |
по |
|||||
41 о 2274 Я ' |
условию. |
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
||
42 К |
|
|
|
Примем |
10 1018—1, |
разместив а в |
29 |
||||
|
}язячейку. |
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
||||
43 Я 31 Я 24 |
|
|
|
|
|
|
|
|
|||
44 ВМ 29 Я 24 |
|
Vi |
|
|
|
|
|
|
|||
45 6i 4 Я > |
|
|
|
|
|
|
|
|
|
||
46 о |
2230 |
Я х |
Hs |
|
|
|
|
|
|
||
47 о |
2250 |
Я } |
|
|
|
|
|
|
|||
48 о |
2176 |
Я 1 |
|
|
|
|
|
|
|
||
49 К |
|
|
} |
Яе |
|
|
|
|
|
|
|
50 Их 36 Я 39 . |
|
|
|
|
|
|
|
||||
51 Я О Я 39 |
|
л |
|
|
|
|
|
|
|||
52 SH 33 Я 11 |
|
|
|
|
|
|
|
||||
53 УП ПН 12 |
|
|
|
|
|
|
|
|
|||
54 ОД 31 Я 12 |
|
|
|
|
|
|
|
|
|||
55 <?, |
16368 |
Я |
|
|
|
|
|
|
|
|
Исходная информация расположена 29 а
30а
31т
33 х.'
Для решения этой простой и небольшой задачи операторную схему можно было бы и не применять. Для начинающего про граммиста операторная схема может помочь в понимании струк
туры программы.
При программировании сложных задач операторные схемы
71
почти всегда необходимы, потому что, наглядно представляя за дачу, они позволяют иногда сократить вычислительную схему, тем более если к этому еще применить и эквивалентные преоб разования операторной схемы в целях ее минимизации (см. {1]
стр. 141).
В дальнейшем при составлении программ мы не будем при менять операторные'схемы из-за простоты задач.
Циклы. Реальная программа, как правило, обеспечивает вы полнение значительно большего количества команд, чем их име ется в самой программе. Это важно благодаря тому, что некото рые серии команд программы выполняются многократно, под вергаясь в случае необходимости преобразованиям. Такое свойст-' во программ обеспечивается группами операторов, называемыми циклами.
Наиболее простыми являются неразветвленные циклы с одним входом и одним-выходом. Такие циклы называются элементар ными.
Элементарный цикл. Это многократно повторяющийся про цесс с использованием одной и той же исходной информации.
Циклические вычислительные процессы или циклические ал горитмы — наиболее часто встречающееся свойство большинства программ.
Для рассмотрения построения программ элементарных циклов выберем соответствующий пример. Пусть требуется вычислить функцию
у = х64. |
1 |
Нецелесообразно решать такую задачу на машине пусть да же такому, на первый взгляд кажущемуся компактным, алгорит му:
1. Послать аргумент х из ячейки, в которой он хранится, в какую-то рабочую ячейку, скажем в 29.
2.Перемножить х на х в 29 ячейке, т. е. перемножить на сум маторе с последующей посылкой результата в 29 ячейку, что й делается автоматически машиной.
3.Перемножить квадраты в 29 ячейке. .
4.Перемножить четвертые степени в 29 ячейке.
'5. Перемножить восьмые степени в 29 ячейке.
6.Перемножить шестнадцатые степени в 29 ячейке.
7.Перемножить тридцать вторые степени в 29 ячейке.
8.Выдать на печать результат из 29 ячейки.
9.Остановить машину.
При большем количестве аналогичных действий может слу читься так, что программа просто не разместится в памяти маши ны.: (Это произойдет в случае, если требуется, например, выдать на печать содержимое большей части ячеек памяти. Здесь.сама; прог рамма, естественно, не может разместиться в оставшейсячасти памяти- т. к. на печать из каждой ячейки требуется: отдельная команда).
72- |
‘ |