AOP_Tom1 (1021736), страница 83
Текст из файла (страница 83)
В строках 101-114 создается узел для этого нового человека и записываются этажи входа (1М) и выхода (ООТ). Стек АЧА11. является односвязным по полю Н1.1МК1 каждого узла. Обратите внимание, что в строках 101-108 действие "С с= АЧА(Еь выполняется с помощью метода РО01НАХ, 2.2.3 — (7); при этом вряд ли здесь понадобится проверка события переполнения (ОЧЕНРЕОМ), так как общий размер пула (количество людей в данной модели работы лифта в произвольный момент времени) едва ли превышает 10 узлов (40 слов). Возврат узла в стек АЧА11. представлен в строках 156 — 158. Во всей этой программе индексный регистр 4 равен переменной Р|ООН, а индексный регистр 5 положителен, отрицателен или равен нулю в зависимости от текущего состояния, т.
е. при выполнении условия ЗТАТЕ = 001МООР. ЗТАТЕ = 001МОООЫМ или ЗТАТЕ = МЕОТНА1 соответственно. Переменные СА11ОР(1л, СА1(.САН(1л и СА1ЕООММ(11 занимают соответственно поля (1:1),(3:3) и (5:5) ячеек СА1Е + 1. 097 к СООРОГРАННА О 098 01 ЛНР ЧА1ОЕБ 099 ьОА 1МТЕНТ1МЕ 100 ЛНР НОЕО 101 106 МАХЕ 109 ЛЗР 1Р 108 Ыб РООСНАК(0:2) 104 1МСб 4 С+- РООСНАХ+ 4. 076 2Н Ы2 077 БТ2 078 БТ1 079 БТб 080 БТ6 081 9Н ЛНР 089 ОЕСЕТЕЧ БТЛ 088 Ы1 084 СО2 085 БТ1 086 БТ2 087 9Н ЛНР 088 СТССЕ1 БТЛ 089 ЛНР 090 НОЫС БТЛ 091 ЛНР 098 СЧССЕ Ыб 098 ЫА 094 БТА 095 ЛНР 096 ЛНР О,((НЕТМК1) 0,6Я11МК1) 0,6(ШМК1) 0,1(Нь)МК1) 0.2((Л.1МК1) к 9Р 0.6(1Л.1МК1) 0,6ЯС1МК1) 0,2(ШМК1) 0,1ЯЕ1МК1) 2,6(МЕХТТМБТ) СТОИТЕ 2,6(МЕХТ1МБТ) НОЮ ЧА11(Ы.1МК1) 1,6 Т1НЕ ОЕЕЕТЕЧ 2.6 Повторять до тех пор, пока МЕХТТ1НЕ(С) > МЕХТТ1НЕ(Р). Ц +- Н1.1МК1(Р). НЕТМК1(С) <- а.
ШМК1(С) <- Р. Н11МК1(Р) +- С. (Л.ТМК1(Ц) ь- С Выйти из подпрограммы. Удалить МООЕ(С) из списка ЧА1Т. (Такой же код, как в строках 058-063, но 111МК1 и НЫМК1 используются вместо С11МК2 и 811МК2.) Установить МЕХТ1МБТ(С) <- гЛ. Вставить МООЕ(С) в список ЧА1Т с задержкой гА. Установить текущий узел С + — Н11МК1(ЬОСЯАТТ) ' 01.
Вхо в систем ожн ание сле гю его человека. Вычислить |М, ООТ, 01ЧЕОРТ1НЕ, ТМТЕНТ1НЕ 1МТЕНТ1НЕ вычисляется подпрограммой ЧАЕОЕБ Разместить МООЕ(С) в списке ЧА1Т с задержкой 1ИТЕНТ1НЕ. С +- АЧАП.. Если АЧАП. ф Л, совершить переход 105 106 107 10В 109 110 111 1Н 112 11Я ЗЦ 115 ЗН 116 117 11В Ц9 120 !21 122 129 124 125 126 127 126 129 150 191 1Я2 1ЯЯ 1ЯЗ 155 156 1Я7 1ЯВ 129 Цб Ц! Ц2 ЦЯ 1й Ц5 Цб Ц7 1!В Ц9 150 151 152 4Н 2Н 03 04А 04 БТб РООЕНАХ(0:2) ЗНР в+3 ЕОА 0,6(И11МК1) ЗТА АЧАП.
101 1МРЕООЕ БТ1 0,6(1И) (З)2 ООТРЕООН ЗТ2 3,6(ООТ) ЕИТА 39 ЗТА 2,6 ЕНТА 0,4 ОЕСА 0.1 ЗТБ ТЕМР ЗАМЕ 2Р ЕМТ6 ЕЬЕЧ1 ЬОА 2,6(ИЕХТ1МБТ) РЕСА Еб ЗАМЕ ЗР ЕМТА ЕЗ БТА 2,6(ИЕХТТМБТ) ЗНР ОЕАЕТЕН ЗНР 4Р ЫА 03 ЗАХ 2Р 5Тб О1 ЗТХ 03 ЗНР 1ИНЕО ЗНР 03 ОЕС2 0,1 ЕМТА ! 12Р в+3 БТА СА11„1(бвб) ЗНР вв2 ЗТА СА(З..1(1:1) ЕОА 02 ЗАХ «+3 ьОА ЕЕЕЧ1+2 (НЕХТ1ИБТ) РЕСА Е! ЗАХ ОЕС1510И 106 ТЕНР 101 0,6(1Н) ЕМТ! ООЕОЕ,1 ЗНР ТИБЕЕТ ЫА 01ЧЕОРТ1НЕ ЗИР НОЫС ЫА 0.6(ТМ) РЕСА 0,4 ЗАМЕ в+3 РООЕНАХ е- С. Предполагается,что переполнение не происходит.
АЧА11 <- Еь1ИК1(АЧА1ь). гП +- 1МРЕООЕ (вычисляется подпрограммой ЧА)З)ЕЗ). ТИ(С) е- гП г12 <- ООТРАООБ (вычисляется подпрограммой ТАЛЕБ). ООТ(С) <- г12. Поместить константу 39 (код операции ЗИР) в третье слово структуры (6). [!2. Пал чепце сигнала л ожг ение. Установить гА е- РЕООЕ. Р1.00И вЂ” 1Н. Сохранить значение С. Совершить переход, если РЕООЕ )А 1И.
Установить С +- 1.0С(Е1.ЕЧ1). Находится ли лифт на шаге Ебу Если да, перейти к шагу ЕБ. Удалить ега из списка МА1Т и повторно вставить в начала списка МА1Т, Совершить переход, если 03 = О. В противном случае присвоить 01 ненулевое значение. Установить 03 +- О. Вставить ЕЕЕЧ1 в начало списка НА1Т. (гП и г12 изменены.) г12 +- ООТ вЂ” 1И. Совершить переход, если лифт направляется вверх.
Установить САШ)ОНИ ПИ) +- 1. Установить САььОРПИ) +- 1. Если 02 = О, вызвать подпрограмму ОЕС151ОИ. Если лифт находится на шаге Е1, вызвать подпрограмму ОЕС1510И. вввв. в*вв, ячв гП +- ЕОС(ООЕОЕПМ) ). Вставить НООЕ(С) с правого конца ООЕОЕПМ). Подождать 01ЧЕОРТ1ИЕ единиц времени. П4. Отказ ат лятельнаго ожн ануя. 1М(С) — РЕООЕ. РЫОЕ = ТМ(С).
См. упр. 7. ~~б. В .. вйе »з СОМЬЕ или ЕЫЧАТОЗ. АЧА15 «в С. Код сопрограммы Е представляет собой очень прямолинейную реализацию приведенного выше полуформального описания. Вероятно, наиболее интересная его часть связана с подготовкой независимых действий лифта на шаге ЕЗ и поиском в списках Е|ЕЧАТОЕ и НОЕВЕ на шаге Е4, 178 э СОПРОГРАНИА Е 174 Е1А ЗИР СТСЬЕ1 175 Е1 ЕОО 176 Е2А ЗИР НОьОС 177 Е2 )ЬМ 1Р 178 ЫА САЫ+1,4 17У А00 САЫ+2,4 180 400 САЫ+3,4 181 400 САЫ+4,4 182 )АР ЕЗ 188 ЫА САЫ-1,4(3:3) 184 АОО САЫ"2,4(3:3) 185 АОО САЫ"3,4(3:3) 186 А00 Саьь"4,4(3:3) 187 ЗИР 2Р 188 1Н ЫА СААЬ" 1,4 18У А00 СА11"2,4 Установить МЕХТТИЗТ +- Е1,перейтн к СТСЬЕ.
Е1. Ожи ание вызова. (Никаких действий.) Е2. Изменение состояния? Движение вверх (001ИСОР). Есть ли вызовы на верхние этажит Если нет, посылали ли пассажиры лифта запрос для перехода к нижним этажам? Движение вниз С01ИСООИМ. Действия те же, что и в строках 178 — 186. 196 А00 САьь+4,4(3:3) 197 2Е ЕММЬ 0,5 198 ЗТЕ САЫ,4 1УУ )АИЕ ЕЗ 200 ЕМТЬ 0 158 ЫА 154 ЗАМЕ 155 06 )ИР 156 ьОА 157 ЗТА 158 ЗТЬ 159 )ИР 160 ОЬ )ИР 161 ЕМТ1 162 ЗИР 168 ЕМТА 164 Ы2 165 ЗТА 166 ЗЬМЕ 167 ОЕС2 168 ЕМТЬ 16У ЕМТЬ 170 ЗИР 171 ЕМТА 172 )ИР 01 04А ПЕСЕТЕ АЧА15 0,6(Ы.1ИК1) АЧАП. СТСЬЕ ОЕьЕТЕ ЕЕЕЧ АТОН 1ИЗЕЕТ 1 3,6(ООТ) САЫ,2(3:3) СТОЕК 0,4 0.2 ЕЬЕЧ2 ОЕЕЕТЕИ 25 ЕЬА Продолжить люделирование.
К5,В~у с ь ььк) из ООЕОЕ. Вставить его с правой стороны списка ЕЬЕЧАТОЕ. Установить САЫСАЕ(ОВТ(С)) Совершить переход, если ЗТАТЕ ф ИЕОТЕАЕ г12 + — ООТ(С) — Н.ООЕ. Установить направление движения для ЗТАТЕ Установить С +- ЬОС(ЕЬЕЧ2), Удалить шаг Е5 из списка ЧА17 Повторить шаг Е5 спустя 2о единиц времени. 1 Изменить направление движения в ЗТАТЕ.
Установить переменные САЫ равными нулю. Совершить переход при вызове обратного направления; в противном случае установить ЗТАТЕ +- МЕОТЗАЬ. ЕЗ. Отк ытие ве ей. ЕЗ ЕМТб ППА ЗАМЕ ЕМТА 1НР ЕИТЬ ЕМТА 1НР БТЬ Бтб ЕМТА Е4А ЕМТЬ ЕЬА )МР ЕЬ ХПА )АЕ ЕИТА 240 24! 242 24Я 244 ЕЬА 03 ЕЬЕЧ1 20 НОППС ЛНР БТЕ ЕМТб ЕМТА )НР «+2 САП.,4(1:3) «+2 Еб 15М БТЕ 15Р СА~Л.,4(3;5) Бте 201 202 2ОЭ 204 805 206 207 208 209 210 211 212 218 214 215 216 217 218 210 220 221 222 22Я 224 225 226 227 228 229 2ЯО 281 2Э2 2ЯЯ 284 225 256 287 2ЯЯ 23.9 Е4 1Н 1Н 2Н 1Н )НР ЕМТА БЬА ЕИТб 506 СНРЬ )Е СИРА УМЕ ЕМТА 1НР 506 СИРб )Е 1НР ЕИТА БТА )НР ЕМТА 1НР 5ТЕ БТЬ )НР Н.ЕЧЗ О,б ПЕЬЕТЕН 300 НОЬО ЕЬЕЧ2 76 НОЬП 02 01 20 Е.ЕЧ1 НОЬОС 0,4 4 п.ечатбн 3.6(Ы1МК2) Е(ЕЧАТОК 1Р З,б(ООТ) 19 Об 2Р ООЕОЕ+3, 4 (Ы.ТМК2) 3,6(Н11МК2) 1Р ПЕ1.ЕТЕН 05 2,6(ИЕХТ1МБТ) 1ИНЕП 25 Е4А П1 03 с?сне НОЬПС 01 «+3 40 Если шаг Е9 уже запланпрован, удалить ега из списка НА17.
Запланировать шаг Е9 спустя 300 единиц времени. Запланировать шаг Е5 спустя 76 единиц времени. Установить 02 не равной нулю. Установить 01 не равной нулю. Е4. Вык нз лн та и вх в него. Ввести значение РЬООН в поле ООТ регистра гА. С <- ЬОС(ЕЬЕЧАТОН). С <- Ы1МК2(С). Поиск в списке Н.ЕЧАТОН справа налево. Если С = ЬОС(ЕЬЕЧАТОН), завершить поиск. Сравнить ООТ(С) с РЬООН. Если ани не равны, продолжить поиск; в противном случае приготовиться к переходу человека к шагу ()6. Установить С +- И.1МК2( ОС(ООЕОЕ(И ООВ))) Верно ли,что С = Ы.1ИК2(С)? Если верно, то очередь пуста. Если неверно, отменить шаг П4 для этого человека. Подготовиться к замене шага ()4 шагом 1Л. Установить МЕХТ1М5Т(С). Поместить человека в начало списка НА1Т.
Подождать 25 единиц времени и повторить шаг Е4 Установить 01 « — О. Установить ПЗ не равной нулю. Вернуться к моделированию других событий. Е5. Зак ытие ве ей. Верно ли, что 01 = О? Если неверно, значит, люди все еще входят или выходят. Подождать 40 единиц времени и повторить шаг Е5. Если 01 = О, установить 03 <- О.
Подождать 20 единиц времени, затем перейти к в~агу Еб. Еб. По готовка к аяженяю. Если 5ТАТЕ ф 001МСПОНИ, то сбросить значения САЫОР и САЬЬСАН для этого этажа. Если ф СО1МСОР, сбросить СААЬСАН и САЫПОНМ Выполнить подпрограмму ОЕС1310М. Если БТАТЕ = МЕОТМАА, перейти к шагу Е1 и подождать.
В противном случае, если 02 ЧА О, отменить шаг Е9 (см. строку 202). Подождать 15 единиц времени. Если БТАТЕ = 001ИОООМИ, перейти к шагу Е8. Есть ли вызовы на верхние этажи? Пора остановить лифт. Подождать в течение 14 единиц времени и перейти к шагу Е2. (См. упр. 8.) 292 Л1Р Е2А 2УЯ Е9 БТЗ 0,5 295 3ТЗ 02 295 ЗМР ОЕС131ОИ 296 1НР СТСАЕ Подпрограмма ОЕС181ОМ здесь не рассматривается (см. упр. 9), как и подпрограмма ЧАЕОЕЯ, которая применяется для указания запросов лифта. В самом конце программы приводится следующий код: ВЕО1И ЕМТ4 2 В начале РЬООМ = 2 ЕМТЕ 0 и БТАТЕ = МЕОТНАЕ 1МР СУСЕКЕ Начать моделирование. РООЕМАХ МОР РОСЕ РОСЕ ЕМО ВЕС1М Вслед за пулом располагаются литералы, временное хранилище.