Программа LMC, чтобы найти разницу между двойной медианой и наименьшим из 3 входов?

Я хочу написать программу LMC, чтобы найти разницу между двойной медианой и самой маленькой из 3 различных входных данных. Я хотел бы помочь с определением алгоритма для этого.

Вот что у меня так далеко:

INPUT 901 - Input first
STO   399 - Store in 99 (a)
INPUT 901 - Input second
STO   398 - Store in 98 (b)
INPUT 901 - Input third
STO   397 - Store in 97 (c)
LOAD  597 - Load 97 (a) 
SUB   298 - Subtract 97 - 98 (a - b)
BRP   8xx - If value positive go to xx (if value is positive a > b else b > a)
LOAD  598 - Load 98 (b)
SUB   299 - Subtract 98 - 99 (b - c)
BRP   8xx - If value positive go to xx (if value is positive b > c else c > b)
LOAD  598 - Load 98 (b) which is the median
ADD   198 - Double to get "twice the median"

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

Я думаю, мне нужно будет как-то отсортировать входные данные от наименьшего к наибольшему, чтобы сделать это эффективно и определить наименьшее входное значение и медиану в пределах одной и той же ветви.

1 ответ

Решение

Я не знаю маленький компьютерный язык, но это не имеет значения, это вопрос алгоритма.

Прежде всего, вы сделали небольшую путаницу, назвав три параметра (сначала вы сказали, что 99 - это a, затем вы сказали, что 97 - это a).

Вы должны загрузить три параметра в 99, 98, 97 (скажем, a, b, c). Затем вы загружаете 99 (а) и вычитаете 98 (б) из 99 (а).

Если результат положительный (99 больше 98), вы должны поменять местами 98 и 99, поэтому наименьшее из двух значений находится в местоположении 99.

Теперь загрузите 98 (с) и вычтите 97 из него. Если результат положительный, поменяйте местами 97 и 98, поэтому наименьшее из двух значений находится в местоположении 98.

Наконец, у вас есть два наименьших числа в 98 и 99 местах, то есть наименьшее и среднее значение.

Загрузите 99 и вычтите из него 98. Если результат положительный, 99 содержит медиану, а 98 - наименьшее, в противном случае наоборот.

Теперь вы можете удвоить среднее значение и вычислить разницу между этим числом и наименьшим.

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