Кубирование чисел с повторным добавлением в MARIE

Я пытаюсь написать подпрограмму для MARIE, которая будет кубировать число с помощью повторного сложения. Я знаю, что мне нужно добавить число, равное его количеству, три раза (поэтому, если его 4, мне нужно добавить 4 к себе 4 раза, 3 раза). У меня нет хорошей идеи о том, как сделать цикл еще 3 раза. Также не уверен, как использовать JnS.

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

/Subroutine for finding cube of number
/
Load Num        /Load the first number
Store Count     /Store this number to use for looping repeated addition
Loop,   Load Sum        /Load the sum for first number into AC
AddI Num        /Add the value in AC of first number
Store Sum       /Store the sum
Load Count      /Load Count again
Subt One        /Subtract one from our counter
Store Count     /Store this new number for our counter
Skipcond 800        /If Count > 0, skip next instruction
Jump Loop       /Continue loop if Count is greater than 0

1 ответ

Храните растущее дополнение в переменной Sum. Используйте значения по адресу переменных с add, а не AddI. Его нужно добавить столько же раз, сколько он сам, чтобы найти квадрат, включая исходное число, следовательно, минус единицу от числа.

Тогда значение в квадрате может быть сохранено во второй переменной Square, который должен быть суммирован количество раз оригинального числа.

Например.
23 = 22 * 2 = (2 + 2) + (2 + 2)
33 = 32 * 3 = (3 + 3 + 3) + (3 + 3 + 3) + (3 + 3 + 3)

Динамический способ сделать это, попросить ввода. Подсчитайте, сколько раз его нужно добавить, используя два цикла. Затем установите петли, как показано выше.

    Input
    Store Num
    Store Sum
    Subt One    /Reduce iterations for square.
    Store Count

SquareLoop, Load Count
    Skipcond 800
    Jump ResetCounter   /When count=0 end program.
    Subt One
    Store Count
    Load Sum
    Add Num
    Output  /Keeping track of the process.
    Store Sum

    Jump SquareLoop

ResetCounter, Load Num
    Subt One    /Reduce iterations for cube loop.
    Store Count    
    Load Sum
    Store Square    /The squared value to sum. 

CubeLoop,  Load Count
    Skipcond 800
    Jump End    /When count=0 end program.
    Subt One
    Store Count
    Load Sum
    Add Square
    Output  /Keeping track of the process.
    Store Sum

    Jump CubeLoop

Output
End, Halt

Num, Dec 0
Count, Dec 1
Square, Dec 0
Sum, Dec 0
One, Dec 1
Другие вопросы по тегам