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