Разработайте алгоритм для ввода 3-х чисел, а затем выведите наибольшее в маленьких человечках
Я могу запрограммировать его на вывод наибольшего из двух чисел, но я застрял на том, как вывести наибольший из трех вводимых чисел. Может кто-нибудь помочь, пожалуйста?
2 ответа
Прописью:
read input into mailboxes M0, M1, M2
if M1 > M2
store M1 into M2
if M0 > M2
store M0 into M2
output M2
У человечка компьютерный ассемблер:
INP
STA M0
INP
STA M1
INP
STA M2
SUB M1
BRP J1
LDA M1
STA M2
J1 LDA M2
SUB M0
BRP J2
LDA M0
STA M2
J2 LDA M2
OUT
HLT
M0 DAT
M1 DAT
M2 DAT
Вы можете запустить программу здесь: Макс. 3 в LMC Emulator
Программа Little Man, которая принимает три значения в качестве входных и производит наибольшее из трех в качестве выходных.
00 IN 901 Take first value as input
01 STO 320 Store the first value in 20th mailbox
02 IN 901 Take second value as input
03 STO 321 Store the second value in 21st mailbox
04 IN 901 Take third value as input
05 STO 322 Store the third value in 22nd mailbox
06 SUB 221 Subtract the second value (21st mailbox) from third value
07 BRP 810 If the difference is positive then, move to the 10th instruction
08 LDA 521 As the second value is greater than third value, load second value
09 STO 322 Store the second value in 22nd mailbox
10 LDA 522 Load the value from 22nd mailbox
11 SUB 220 Subtract the first value (20th mailbox) from loaded value
12 BRP 815 If the difference is positive then, go to the 15th instruction
13 LDA 520 As the first value is greater than loaded value, load first value
14 STO 322 Store the first value in 22nd mailbox
15 LDA 522 Load the value from 22nd mailbox
16 OUT 902 Output the loaded value
17 HLT 000 Stop
Код сборки LMC Комментарий
INP
L1 STA привет
L2 LDA co
SUB two
BRZ op
LDA co
ADD one
STA co
INP
STA wo
SUB hi
BRP sw
BRA L2
sw LDA wo
BRA L1
оп LDA привет
OUT
HLT
привет DAT
co DAT
wo DAT
один DAT 1
два DAT 2
Введите первое число
L1 Храните номер как самый высокий на данный момент
L2 Загрузите счетчик цикла
Вычтите два из счетчика
Если мы закончили, перейдем к выводу оп
В противном случае загрузить счетчик
Добавить один на счетчик
Храните обновленный счетчик
Получить следующий номер
Сохраните это как рабочий номер
Вычтите наибольшее число до сих пор
Переходите к sw (ap), если у нас есть новый максимум
В противном случае вернуться к L2
sw Загрузите рабочий номер (новый максимум)
Ветвь к L1
Опять загрузить наибольшее число снова
Отправить его на выход
Остановить программу
Данные для хранения текущего большого числа
Данные для хранения счетчика цикла
Данные для хранения рабочего номера
Данные содержат номер приращения цикла
Данные количество раз для цикла
Это можно легко адаптировать для большего числа номеров, изменив последний оператор DAT. Чтобы сделать десять чисел, используйте "два DAT 9" вместо.