Разработайте алгоритм для ввода 2 чисел, а затем выведите наименьшее число в вычислениях маленького человека

У меня есть программа, которую я делаю, и я хочу ввести два числа, чтобы LMC мог вывести самое маленькое. Мой код дает мне наибольшее число, помогите мне исправить это.

INP
STA first
INP
STA second

SUB second
BRP secondBig
LDA second
OUT
BRA endProgram
secondBig LDA second
OUT
endProgram HLT
first DAT
second DAT

2 ответа

Решение

Вы храните оба входных значения в firstЭто означает, что вы перезаписываете первое вторым.

Как до, так и после исправления вышеизложенного ваш код не выводит наибольшее значение, а выводит второе (независимо от относительного размера). Одноступенчатый или фактически чтение кода должно сказать вам, почему.

Инвертируйте свою условную ветвь: используйте BRN (отрицательная ветвь) вместо BRP. Альтернативно, переключите логические ветви, которые решают, какое значение будет доступно для вывода.

Проблема заключалась в том, что вы сравнивали второй ввод сам с собой. Вы можете вставить LDA first непосредственно перед SUB second, но если вы инвертируете выходные блоки, вы можете избежать этого лишнего LDA

Также сбивает с толку то, что у вас есть ярлык "secondBig", когда на самом деле вы ищете не самое большое число, а самое маленькое.

Исправление:

         #input: 4 7
           INP
           STA first
           INP
           STA second

           SUB first
           BRP firstLeast

           LDA second     
           OUT
           BRA endProgram
           
firstLeast LDA first
           OUT
           
endProgram HLT

first      DAT
second     DAT

<script src="https://cdn.jsdelivr.net/gh/trincot/lmc@v0.7/lmc.js"></script>

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