Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 [ 63 ] 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225

Таблица 1

ПРИМЕВЕНИЕ АЛГОРИТМА А К ВЫРАЖЕНИЮ (6)

После

шага

START

CURRENT

(acfg)

(bed)

(aed) (/

ade)

{b g f ae

Вывод

acfg

a e d

fade

b g f a e

b g f ae

<1/9

b g fae

cf 9

b Jd

b g f a e

b d

fade

b g f a e

cf 9

b d

f Irfe

b gfae

cf 9

b d

bg fae

cf 9

gfae

g a e

g a e

g a e

9 e

Здесь обозначает положение курсора сргизу за только что проверенным элементом помеченные элементы выделены гвепо серым цветом

что обозначает правою скобку конца цикла, (с) "uuuuu", т е все пробелы, которые можно вставить в любом месте, чтобы заполнить пространство, (d) любой символ, обозначающий элемент, который н\ жно переставить Последняя карта входных данных определяется по тому, что в ее колонках 76-80 содержится "uuuu=" Например, (6) можно перфорировать на двух картах следу ющим образом

( А

G )

( В

D )

( А

D )

( F

Е )

( В

F А

Е )

В выводе нашей программы будет содержаться точная копия ввода с последующим ответом в таком же, в сущности, формате

Программа А {Перемножение перестановок, представленных в виде циклов) В этой программе реализован алгоритм А, а также предусмотрены процедуры ввода, вывода и удаления единичных циклов

01 MAXWDS EQU 1200 Максимальная длина ввода

02 PERM ORIG *+MAXWDS Вводная перестановка

03 ANS ORIG *+MAXWDS Место для ответа

04 OUTBUF ORIG *+24 Место для печати

05 CARDS EQU 16 Номер устройства чтения перфокарт

06 PRINTER EQU 18 Номер \ЦПУ

07 BEGIN IN PERM (CARDS) Читать первую карту



ENT2

EQUALS

JBUS

*(CARSS)

Ожидать окончания цикла

СМРА PERM+15,2

Это последняя перфокарта

PERM+16,2(CARDS)

Нет, читать следующую.

ENTl

OUTBUF

JBUS

*(PRINTER)

Напечатать копию введенной

MOVE PERM,2(16)

перфокарты.

OUTBUF(PRINTER)

INC2

CMP2

=MAXWDS-16=

Повторять до окончания ввода.

Слишком много входной информации!

INC2

В данный момент г12 введенных слов

SIZE

находятся в ячейках PERM, PERM + 1,

ENT3

Al. Первый проход.

LOAN PERM,3

Взять следующий элемент ввода.

CMPA LPREN(1:5)

Это "("?

PERM,3

Если да, пометить ее.

INC3

Поместить следующий непустой символ ввода

LDXN PERM,3

в гХ

CMPA RPREN(1:5)

PERM,3

Заменить ")" помеченным элементом из гХ.

INC3

CMP3

SIZE

Все элементы обработаны?

LPREN

Подготовиться к главной программе.

ENTl

гП - место сохранения следующего ответа.

OPEN

ENT3

А2. Открытие.

LDXN

PERM,3

Искать непомеченный элемент

43 44

JXN INC3

GO 1

CMP3

SIZE

Все Элементы помечены. Выполняется вывод

DONE

CMPl

=ANS=

Ответ является тождественной перестановкой?

MOVE LPREN(2)

Если да, заменить на "0"

MOVE

Поместить 23 слова пробелов после ответа.

MOVE

-1,1(22)

ENT3 0

ANS,3(PRINTER)

INC3

ANS,3

Напечатать столько строк, сколько необходимо.

JXNZ



LPREN

ALF (

Константы, используемые в программе.

RPREN

ALF )

EQUALS

MOVE LPREN

Открыть цикл в выводе.

MOVE PERM,3

STX START

SUCC

STX PERM.S

Пометить элемент.

INC3 1

Сделать один шаг вправо.

LDXN PERM,3(1:5)

A3. Установить CURRENT (а именно -гХ)

JXN IF

Пропустить пробелы.

JMP *-3

STX 0,1

Вывести CURRENT.

INCl 1

ENT3 0

Снова просмотреть формулу.

CMPX PERM,3(1:5)

А4. Просмотр формулы.

JE SUCC

Элемент = CURRENT?

INC3 1

Продвинуться вправо.

CMP3 SIZE

Конец формулы?

JL 4B

CMPX START(1:5)

А5. CURRENT = START?

JNE 53

CLOSE

MOVE RPREN

А6. Закрытие.

CMPA -3,1

Заметить: гА = "(".

JNE OPEN

INCl -3

Удалить единичные циклы.

JMP OPEN

END BEGIN

Эта программа, содержащая примерно 75 команд, значительно длиннее программ из предыдущего раздела, да и большинства программ, с которыми мы встретимся в этой книге. Но ее длина не должна внушать вам страх, так как она делится на несколько маленьких частей, которые достаточно независимы одна от другой. В строках 07-22 происходит считывание входных перфокарт и печать копии каждой карты; в строках 23-38 вьшолняется шаг А1 алгоритма, т. е. предварительная обработка входных данных; в строках 39-46 и 64-86 вьшолняется основная часть алгоритма А, а в строках 48-57 выводится ответ. Читателю полезно изучить как можно больше программ для MIX, приведенных в данной книге, поскольку чрезвычайно важно приобрести опыт чтения программ, написанных другими. Но, к сожалению, подобной формой обучения пренебрегали на многих компьютерных курсах, что привело к крайне неэффективному использованию компьютерной техники.

Время выполнения. Те части программы А, которые не связаны с операциями ввода-вывода, снабжены счетчиками частоты, указывающими, сколько раз они выполняются (как в программе 1.3.2М); таким образом, предполагается, что строка 30 вьшолняется В раз. Для удобства считается, что во входной информации пустые слова могут находиться только у правого края; при этом условии никогда не вьшолняется строка 71 и никогда не происходит переход в строке 32.



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 [ 63 ] 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225