Небольшая основная компьютерная программа для отображения частного, за которым следует остаток

#divide #little-man-computer

#разделить #маленький человек-компьютер

Вопрос:

Это то, что у меня есть до сих пор, но я не могу заставить его работать. Мне нужно, чтобы он вводил дивиденд и делитель и выводил результат вместе с остатком. Пример: если на входе 33, за которым следует 6, на выходе будет 5, за которым следует 3, поскольку 33/6 равно 5, остаток 3.

 00          INP                      //ask the user
01          BRZ     QUIT            // halt the execution if input zero
02          STA     DIVIDEND        // store in dividend variable
03          INP                     // input dividor
04          BRZ     QUIT            // halt the execution if input zero
05          STA     DIVISOR         // store in divider variable
06          LDA  DIVIDEND          // load into acc
07  LOOP    STA  RESULT            // store the temp result
08          LDA  RESULT             // load the result
09          SUB  DIVISOR            // subtract the dividor to acc BRP
10          BRP  LOOP                //loop if acc is positive or zero
11          LDA  RESULT             // load the result into acc
12          OUT                     // display the result
13  QUIT    HLT                     // halt if zero
14          HLT                     // halt the execution
15  DIVIDEND    DAT                 //declare variable
16  DIVISOR     DAT 
17  RESULT      DAT
 

Комментарии:

1. Он отображает только остаток. Но мне это нужно для отображения обоих

Ответ №1:

В настоящее время вы правильно получаете входные данные, вычисляете остаток и выводите его. Вы просто пропускаете ту часть, где вы вычисляете частное и выводите его. Фактор — это действительно количество раз, когда вы возвращаетесь к началу цикла. Итак, увеличивайте счетчик на каждой итерации цикла. Затем, когда вы выйдете из цикла, вы посчитаете слишком много, поэтому для частного вы выведете на единицу меньше этого значения.

Другие замечания:

  • Нет необходимости выполнять LDA RESULT , если это следует немедленно STA RESULT , поскольку это значение все еще находится в накопителе — нет необходимости его перезагружать.
  • Нет необходимости иметь HLT followed by HLT . Эта вторая никогда не будет выполнена.
  • В комментариях бесполезно указывать, что делает инструкция LMC… Например, «спросить пользователя» не является полезным комментарием рядом с INP . Комментарии должны объяснить что-то еще — что-то специфичное для этой программы. Большинство ваших комментариев просто говорят о том, что кто-то может посмотреть в спецификации языка LMC. Это не цель комментариев.

Итак, вот ваш код с дополнительным счетчиком для получения частного и с учетом приведенных выше замечаний. Вы можете запустить его здесь.

 #input: 19 9
          INP // Input the dividend
          BRZ QUIT // Zero is not considered a valid input
          STA DIVIDEND
          INP // Input divisor
          BRZ QUIT // Division by zero is not allowed
          STA DIVISOR
          LDA ZERO // Initialise quotient
          STA QUOTIENT
          LDA DIVIDEND // Let dividend be the initial value of the remainder
// Repeat as long as remainder would be non-negative:
LOOP      STA REMAINDER
          LDA QUOTIENT // Increment quotient
          ADD ONE
          STA QUOTIENT
          LDA REMAINDER // Reduce remainder
          SUB DIVISOR
          BRP LOOP
// Output the results
          LDA QUOTIENT // quotient is one too great now
          SUB ONE
          OUT
          LDA REMAINDER
          OUT
QUIT      HLT

// constants:
ZERO      DAT 0
ONE       DAT 1

// variables:
DIVIDEND  DAT
DIVISOR   DAT
QUOTIENT  DAT
REMAINDER DAT


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

Комментарии:

1. Божественно! Спасибо!