задача на массивы, перестановка и подсчет сумм |
1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!
задача на массивы, перестановка и подсчет сумм |
монтик |
7.12.2008 17:04
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 13 Пол: Мужской Репутация: 0 |
Начали изучать assembler, и сразу посыпались задачи перед сессией!!! Уважаемые форумчане, может кто сможет помочь решить задачу, а то я не бельмеса не могу сообразить! Кстати посоветуйте пожалуйста толковый учебник по assemblery!!
Задачки следующие: 1) массив из задаваемого количества элементов, переставить положител. эл. массива в обратном порядке(по убыванию), не меняя положения остальных. 2) определить положение мах и мин эл. массива до и после перестановки эл., посчитать сумму положит. и удалить их. |
volvo |
7.12.2008 19:57
Сообщение
#2
|
Гость |
монтик, вот смотри, что мне пришло в голову по поводу первой задачи. Идея очень простая: проходишь по массиву 2 раза: первый раз - при встрече положительного значения заталкиваешь его в стек (отрицательные просто пропускаешь), а при втором проходе - при встрече положительного меняешь его на то, которое вытаскивается из стека. Поскольку запись/чтение стека производятся с одного конца, то получится, что после второго прохода положительные значения будут записаны в обратном порядке, а отрицательные - не изменятся вообще. Вот программа, подпрограмму вывода числа на печать writeDEC возьми здесь: Обработка символьной информации
MODEL small Цитата Кстати посоветуйте пожалуйста толковый учебник по assemblery!! Классика - Питер Абель: Ассемблер и программирование для IBM PC, сам с него начинал когда-то... |
монтик |
8.12.2008 15:55
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 13 Пол: Мужской Репутация: 0 |
Хорошая идея!!! Спасибо volvo, разобрался более,менее в этой задаче. А по второй можешь что посоветовать?!
|
volvo |
8.12.2008 16:10
Сообщение
#4
|
Гость |
Ну, вторая связана с первой, насколько я вижу... Как найти мин/макс значение знаешь? Проход по массиву и поэлементное сравнение с содержимым двух ячеек памяти: min и max... Точно так же, как и на любом другом языке программирования.
Этот проход тебе придется сделать дважды: и до и после преобразований, произведенных в первой задаче. В том же цикле можно и считать сумму положительных элементов. А вот насчет удалить - я бы попробовал во время прохода по массиву (если текущий элемент - положительный, естественно) воспользоваться REP MOVSW для перемещения хвостовых элементов массива на один влево, одновременно уменьшая и massLen... таким образом у тебя после окончания прохода все положительные элементы будут затерты последующими отрицательными... Попробуй начать реализацию второго задания самостоятельно, если что-то не получится - обращайся, подскажем |
монтик |
8.12.2008 16:22
Сообщение
#5
|
Новичок Группа: Пользователи Сообщений: 13 Пол: Мужской Репутация: 0 |
volvo, подскажи как найти мин и мах? и как оформить цикл прохода, а дальше я попробую сам додуматься! Спасибо за подсказку!!
|
volvo |
8.12.2008 16:37
Сообщение
#6
|
Гость |
Цитата как найти мин и мах? Вот так:; в сегменте данных:Продолжай Сообщение отредактировано: volvo - 8.12.2008 16:37 |
монтик |
8.12.2008 16:47
Сообщение
#7
|
Новичок Группа: Пользователи Сообщений: 13 Пол: Мужской Репутация: 0 |
А что значит "воспользоваться REP MOVSW для перемещения хвостовых элементов массива на один влево, одновременно уменьшая и massLen... " ?
|
volvo |
8.12.2008 17:06
Сообщение
#8
|
Гость |
Ты у Абеля прочитай, что делает префикс REP..., и что делает MOVS..., сам все поймешь... Я полностью программу за тебя делать не буду все равно, это не мне надо, это в первую очередь надо тебе... Не нравится REP MOVSW - делай по-другому, двумя явными вложенными циклами, от этого ничего не изменится, просто больше писать придется...
Сообщение отредактировано: volvo - 8.12.2008 17:06 |
монтик |
8.12.2008 17:12
Сообщение
#9
|
Новичок Группа: Пользователи Сообщений: 13 Пол: Мужской Репутация: 0 |
Спасибо за совет! Буду разбирать учебник. Как сделаю напишу!
|
Текстовая версия | 20.10.2024 17:23 |