Разработайте алгоритм для ввода 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" вместо.

Другие вопросы по тегам