Консультация № 194142
08.12.2018, 23:22
0.00 руб.
0 1 1
Здравствуйте, уважаемые эксперты! Прошу помощи в следующем вопросе:
Три массива в памяти заданы начальными адресами и длинами. Вычислить и вывести на устройство вывода среднее арифметическое параметров этих массивов. Параметр массивов это минимальное положительное число. CompModel, Модель ЭВМ.

Есть такой код, но здесь необходимо сделать поиск минимального из положительных.

[code lang=asm]RD #040 ;загрузка начального адреса массива
WR 030 ;в ячейку 030
RD #14 ;загрузка параметра цикла k=14 в ячейку 031
WR 031
RD #0 ;загрузка искомого минимального положительного числа нулём
WR 032 ;в ячейку 032
M1: RD @030 ;берём очередной элемент массива
SUB #1 ;сравниваем с 1 - т.е. проверяем на положительность
JNS M2 ; если положительное - завершаем поиск первого положительного
RD 30 ; увеличиваем адрес массива на 1 (переходим к следующему элементу)
ADD #1
WR 30
RD 031 ; Уменьшаем счётчик (параметр цикла) на 1
SUB #1
WR 031
JNZ M1 ; Если цикл не закончился - переходим к рассмотрению следующего элемента массива
M2:[/code]

Заранее, благодарю.

Обсуждение

давно
Посетитель
7438
7205
10.12.2018, 16:58
общий
это ответ
Здравствуйте, lmk!
Примерно так...
Думаю, разберетесь... В тексте достаточно комментариев.
[code lang=asm]RD #3 ;количество массивов и минимальных положительных
WR R4 ;(для подсчета среднего арифметического)
RD #40 ;загрузка начального адреса первого массива
WR R0 ;в регистр R0
RD #5 ;загрузка длины массива k=5 в регистр R2
WR R2
CALL MINPOS ;ищем минимальное положительное в массиве
WR R3 ;накапливаем сумму для среднего арифметического

RD #50 ;загрузка начального адреса второго массива
WR R0 ;в регистр R0
RD #4 ;загрузка длины массива k=4 в регистр R2
WR R2
CALL MINPOS
ADD R3 ;накапливаем сумму для среднего арифметического
WR R3

RD #60 ;загрузка начального адреса второго массива
WR R0 ;в регистр R0
RD #5 ;загрузка длины массива k=5 в регистр R2
WR R2
CALL MINPOS
ADD R3 ;накапливаем сумму для среднего арифметического

DIV R4 ;делим на количество
OUT ;выводим среднее арифметическое
HLT ;останов

MINPOS:RD #0 ;обнуляем минимальное положительное
WR R5
M1:RD @R0+ ;берём очередной элемент массива (с автоинкрементом адреса)
JS NEXT ;отрицательные
JZ NEXT ; и нулевые пропускаем
WR R6 ;сохраним в R6
RD R5 ;проверим текущее минимальное положительное на 0
JZ NEW ;если найдено первое положительное, то просто сохраняем в R5
RD R6 ;только что прочитанное положительное число
SUB R5 ;сравниваем с минимальным
JNS NEXT ;если >= , то на следующее
NEW:MOV R5,R6 ;нашли очередное минимальное
NEXT:JRNZ R2,M1 ;циклим по всем элементам массива
RD R5 ;возвращаем результат в аккумуляторе
RET[/code]
5
Премного благодарен)<br>
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа