Программа 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 - наименьшее, в противном случае наоборот.
Теперь вы можете удвоить среднее значение и вычислить разницу между этим числом и наименьшим.