07.12.2019, 06:36 [+3 UTC]
в нашей команде: 4 039 чел. | участники онлайн: 5 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.78 (18.11.2019)
JS-v.1.34 | CSS-v.3.35

Общие новости:
28.04.2019, 09:13

Форум:
29.11.2019, 17:59

Последний вопрос:
07.12.2019, 03:46
Всего: 151182

Последний ответ:
05.12.2019, 15:20
Всего: 259536

Последняя рассылка:
06.12.2019, 16:15

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
27.05.2010, 16:12 »
Петров Юрий Иванович
Спасибо! Вы мне очень помогли) [вопрос № 178666, ответ № 261687]
07.10.2009, 15:05 »
Владимир Лазурко
Спасибо за фракталы! Теперь осталось найти 3D-демонстрации и объемные объекты. [вопрос № 173015, ответ № 255124]

РАЗДЕЛ • Assembler

Создание программ на языке Assembler.

[администратор рассылки: Лысков Игорь Витальевич (Старший модератор)]

Лучшие эксперты в этом разделе

Коцюрбенко Алексей Владимирович
Статус: Модератор
Рейтинг: 1444
Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 701
Лысков Игорь Витальевич
Статус: Старший модератор
Рейтинг: 142

Перейти к консультации №:
 

Консультация онлайн # 188442
Раздел: • Assembler
Автор вопроса: Марина (Посетитель)
Отправлена: 16.12.2015, 22:52
Поступило ответов: 1

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

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

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

Заранее - большое спасибо.

Приложение:

Состояние: Консультация закрыта

Ответ # 273074 от Лысков Игорь Витальевич (Старший модератор)

Здравствуйте, podopitnijantiboy!
Добавил проверку, найдены ли вообще отрицательные числа
И если их нет, то возвращается 0, которым все и завершается!
В самой функции поиска ищем сначала отрицательные, а затем
из них - максимальный

RD #85
WR R1
RD #14
WR R2
CALL MN
JZ O
WR R6
RD #100
WR R1
RD #4
WR R2
CALL MN
JZ O
WR R7
RD #110
WR R1
RD #9
WR R2
CALL MN
JZ O
ADD R7
ADD R6
DIV #3
O:OUT
HLT

MN: RD @R1+
js L1
jrnz r2,MN
rd #0
ret
L1: WR R3 
jrnz r2,L2
jmp L4
L2: RD @R1+
jns L3
WR R4
SUB R3
JS L3
MOV R3,R4
L3: JRNZ R2,L2
L4: RD R3
RET


Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 17.12.2015, 00:23

5
Все было выполнено очень быстро и корректно. Спасибо за помощь
-----
Дата оценки: 17.12.2015, 18:41

Рейтинг ответа:

+2

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 188442

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 1

= общий = | 16.12.2015, 23:02 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Марина:

Здравствуйте!
А самостоятельно не пробовали написать?
Кидайте - посмотрим, подправим.

=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен

Марина
Посетитель

ID: 399312

# 2

= общий = | 17.12.2015, 13:50 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Экспертам раздела:

Лысков Игорь Витальевич, спасибо, что так быстро ответили. Я пробовала написать программу сама, но там все очень ужасно получается smile Но благодаря Вам, программа работает идеально. СПАСИБО ВАМ ОГРОМНОЕ У меня правда только один вопрос: программа будет выводить наибольший отрицательный результат в качестве суммы (если, как в примере, (-4+(-17)+(-7))/3=-28/3=-9), не так ли?

-----
 Прикрепленный файл:  скачать (DOCX) » [111.4 кб]

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 3

= общий = | 17.12.2015, 14:03 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Марина:

Так-так smile Выводится среднее арифметическое трех максимальных отрицательных. smile

=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 4

= общий = | 17.12.2015, 14:07 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Марина:

Кстати, незачем было слать всем экспертам раздела. smile
Вы же мне хотели написать, а не всем, не так ли? smile

=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 5

= общий = | 17.12.2015, 14:12 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Марина:

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

-----
Последнее редактирование 17.12.2015, 14:13 Лысков Игорь Витальевич (Старший модератор)

=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен

Марина
Посетитель

ID: 399312

# 6

= общий = | 17.12.2015, 14:16 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Лысков Игорь Витальевич:

Ой,простите, еще не научилась правильно работать с форумом. smile Да, среднее арифметическое трех максимальных отрицательных элементов... smile Я имела ввиду то, что в Acc записался результат 100009 (=-9), а не 100010 (=-10), так всегда будет в спорных вопросах, когда сумма максимальных отрицательных не будет кратна 3?

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 7

= общий = | 17.12.2015, 14:23 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Марина:

Ну да, при делении осуществляется округление к ближайшему, причем рассматривается модуль числа.
Т.е. и 100028 / 3 = 100009 (-28/3 = -9), и 000028 / 3 = 000009 (28/3 = 9)

=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен

Марина
Посетитель

ID: 399312

# 8

= общий = | 17.12.2015, 14:25 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Лысков Игорь Витальевич:

Почему-то не сохранились последние изменения, но в отчете начала составлять программу, после изменять блок-схему, снова программу и т.д. smile В итоге ничего не работало smile smile

-----
 Прикрепленный файл:  скачать (DOCX) » [262.0 кб]

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 9

= общий = | 17.12.2015, 14:44 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Марина:

Главная проблема - неправильная работа подпрограммы поиска максимального отрицательного
(остальное - в общем-то, одинаковое у всех)
1) Надо искать среди отрицательных, поэтому неотрицательные надо пропускать,
одновременно корректно учитывать счетчик массива
2) Поэтому в начале надо найти сначала первый отрицательный, только потом искать
максимального из всех остальных.
3) Команда js(jns) проверяет знак числа в аккумуляторе, поэтому нет необходимости
предварительно что-то там отнимать. Это не ошибка, просто лишнее
4) Что-то надо делать, если не будет найдено ни одного отрицательного.
Я в своей программе просто пишу в аккумуляторе 0 и больше ничего не делается...

Программа в ДОКе практически ничем не отличается от примера smile

M: RD@R1
WR R3
SUB R9
JNS L2 ; получается, что идет дальше при неотрицательных значениях, что неправильно
WR R3 ;а отрицательное сохраняет

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

Мой код понятен?

=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен

Марина
Посетитель

ID: 399312

# 10

= общий = | 17.12.2015, 14:50 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Лысков Игорь Витальевич:

да, код Вашей программы абсолютно ясен smile СПАСИБО ЗА ПОМОЩЬ

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 11

= общий = | 17.12.2015, 14:57 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Марина:

Держите прокомментированный код smile smile

MN:	RD @R1+		;читаем очередное значение, начиная с первого
	js L1		;отрицательное?
	jrnz r2,MN	;нет, уменьшаем счетчик, проверяем на 0, если не 0 - на начало
	rd #0		;прошли весь массив, отрицательных не нашлм, возвращаем 0
	ret
L1: WR R3 		;нашли отрицательное, соханим в r3, считаем его максимальным
	jrnz r2,L2	;уменьшаем счетчик, если не 0 - продолжаем поиск
	jmp L4		;счетчик = 0 - имеем одно отрицательное значение, 
				;которое последнее в массиве, и которое будет максимальным
L2: RD @R1+		;читаем очередное значение
	jns L3		;не отрицательное - на уменьшение счетчика
	WR R4		;нашли очередное отрицательное, сохраним его в r4
	SUB R3		;сравним с максимальным
	JS L3		;< - максимальный не меняется - идем на уменьшение счетчика
	MOV R3,R4	;>= - получаем нового максимального
L3: JRNZ R2,L2	;уменьшаем счетчик, если не 0 - на продолжение поиска
L4: RD R3		;массив пройден, возвращаем максимального отрицательного
	RET

-----
Последнее редактирование 17.12.2015, 15:00 Лысков Игорь Витальевич (Старший модератор)

=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен

Марина
Посетитель

ID: 399312

# 12

= общий = | 17.12.2015, 15:00 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Лысков Игорь Витальевич:

Спасибо-спасибо, но код, правда, был ясен smile

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 13

= общий = | 17.12.2015, 15:01 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Марина:

Ну, хорошо, удачи! smile

=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен

Марина
Посетитель

ID: 399312

# 14

= общий = | 17.12.2015, 15:15 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Лысков Игорь Витальевич:

Спасибо smile

 

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.16859 сек.

© 2001-2019, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.78 от 18.11.2019
Версия JS: 1.34 | Версия CSS: 3.35