#little-man-computer
#компьютер маленького человека
Вопрос:
Я пытаюсь создать программу, которая сначала принимает n входных данных от пользователя, а затем вычисляет сумму этих чисел. Затем я хочу, чтобы программа печатала, является ли сумма четным или нечетным числом.
Например, если пользователь вводит 3, ему / ей придется ввести 3 числа (например, 3, 2, 5): тогда программа вычислит их сумму (3 2 5 ) и выведите, является ли ответ (10) четным или нечетнымчисло.
Я думал, что правильно закодировал ее, но она не запускается в симуляторе LMC, может кто-нибудь, пожалуйста, помочь мне найти ошибку?
Мой код:
INP
STA b
ab INP
STA a
LDA total
ADD a
STA total
STA count
LDA b
SUB one
STA b
BRZ number
BRP loop
bc LDA count
SUB two
STA count
BRZ evennumber
BRP number
LDA total
OUT
LDA space
OTC
OTC
LDA o
OTC
LDA d
OTC
OTC
LDA e
OTC
HLT
cd LDA total
OUT
LDA space
OTC
OTC
LDA p
OTC
LDA A
OTC
LDA r
OTC
HLT
a DAT 0
b DAT 0
total DAT 0
one DAT 1
two DAT 2
count DAT 0
o DAT 111
space DAT 32
d DAT 100
e DAT 101
p DAT 112
A DAT 97
r DAT 114
Комментарии:
1.
OTC
не является инструкцией LMC. Какой симулятор вы используете?2. Мне сказали, что я должен использовать OTC, но я тоже об этом не слышал, должен ли я использовать OUT вместо этого?
3. Если вам так сказали, то я полагаю, что все в порядке. Я полагаю, что он выводит данные в виде символа.
4. да, я думаю, но даже если я изменю его на OUT, код все равно не будет работать так, как я хочу, но, похоже, я не могу найти проблему..
5. Не удаляйте вопросы, когда люди потратили время на их ответы. Теперь я не хочу тратить время на ваш вопрос, так как вы можете просто решить удалить его снова.
Ответ №1:
Основная проблема в вашем коде заключается в несоответствии меток.
С одной стороны, вы определили следующие метки:
- ab
- до н. э.
- компакт- диск
… но вы ссылались на следующие метки:
- петля
- число
- четное число
Как следствие , ваш код недействителен … он не будет анализировать.
Второй набор меток имеет больше смысла, в то время как «ab», «bc», «cd» бессмысленны: они не помогают читателю вашего кода понять, о чем они. Так что согласуйте свой код со вторым набором.
Кроме того, не определено, чувствителен ли LMC к регистру, поэтому использование имени переменной a
и другого A
имени не обязательно будет поддерживаться. Вместо этого дайте значимые имена. Первое a
— это фактически число, которое вы вводите и которое нужно добавить к сумме, так что, возможно, назовите его summand
вместо a
. Затем A
можно было бы вызвать другой a
, поскольку он действительно представляет букву «а». b
также бессмысленно. Он представляет количество ожидаемых входных данных, так что, возможно, вызовите его inputs
.
Принимая это во внимание, ваш код будет выглядеть следующим образом:
#input: 2 4 5
INP
STA inputs
loop INP
STA summand
LDA total
ADD summand
STA total
STA count
LDA inputs
SUB one
STA inputs
BRZ number
BRP loop
number LDA count
SUB two
STA count
BRZ evennumber
BRP number
LDA total
OUT
LDA space
OTC
OTC
LDA o
OTC
LDA d
OTC
OTC
LDA e
OTC
HLT
evennumber LDA total
OUT
LDA space
OTC
OTC
LDA p
OTC
LDA a
OTC
LDA r
OTC
HLT
summand DAT 0
inputs DAT 0
total DAT 0
one DAT 1
two DAT 2
count DAT 0
o DAT 111
space DAT 32
d DAT 100
e DAT 101
p DAT 112
a DAT 97
r DAT 114
<script src="https://cdn.jsdelivr.net/gh/trincot/lmc@v0.72/lmc.js"></script>