0 / 0 / 0
Регистрация: 28.05.2017
Сообщений: 5
|
||||||
1 | ||||||
Все отрицательные элементы массива А необходимо поставить в начало массива, а положительные в конец28.05.2017, 17:11. Показов 2034. Ответов 8
Метки нет (Все метки)
Здравствуйте! Нужна небольшая помощь с массивами в Assembler. Задача в следующем: Все отрицательные элементы массива А необходимо поставить в начало массива, а положительные в конец.
Я написал следующее, но она работает не совсем так, как нужно.
0
|
28.05.2017, 17:11 | |
Ответы с готовыми решениями:
8
Все отрицательные элементы массива необходимо поставить в начало массива Все элементы массива, не равные нулю, переписать, сохраняя их порядок, в начало массива, а нулевые значения - в конец Перенести в начало массива все положительные элементы В массиве все положительные элементы массива просуммировать, а отрицательные элементы удвоить |
Модератор
|
|
28.05.2017, 17:14 | 2 |
А какой алгоритм?
0
|
0 / 0 / 0
Регистрация: 28.05.2017
Сообщений: 5
|
|
28.05.2017, 17:31 [ТС] | 3 |
начинаю с первого элемента, если он отрицательный то оставляю, если положительный делаю перестановку с последним, опять проверяю его если он опять положительный делаю перестановку с предпоследним и так по кругу, пока пока адреса не сойдутся
0
|
Модератор
|
||||||
28.05.2017, 18:11 | 4 | |||||
Знаете, можно модификацией сортировки пузырьком. Сравнивать соседние элементы логическими операциями и потом по значению знакового бита принимать решение о перестановке.
Как идея? Два числа A и B - соседи массива. Таблица истинности для знаковых бит. Если результат равен 1 - требуется перестановка. Код
A B | R 0 0 | 0 0 1 | 1 1 0 | 0 1 1 | 0 И в терминах ассемблера
0
|
0 / 0 / 0
Регистрация: 28.05.2017
Сообщений: 5
|
|
28.05.2017, 18:11 [ТС] | 5 |
ФедосеевПавел, начинаю с первого элемента, если он отрицательный то оставляю, если положительный делаю перестановку с последним, опять проверяю его если он опять положительный делаю перестановку с предпоследним и так по кругу, пока пока адреса не сойдутся
0
|
Модератор
|
|||||||||||
28.05.2017, 19:16 | 6 | ||||||||||
Это я понял. Попробуйте сортировку пузырьком, с более сложной, чем просто (A[i]>A[i-1]). Целевую функцию я показал.
Добавлено через 15 минут ------------------------- Посмотрел на вашу программу - а как вы узнаёте, что массив в точности равен исходному? Ведь исходный совсем не выводится на экран. Добавлено через 12 минут Вот программа для проверки идеи.
Остаётся лишь реализовать сортировку на ассемблере Добавлено через 32 минуты На Pascal оставил для понимания сортировки. Формулу весовой функции и её вывод приводил ранее.
1
|
0 / 0 / 0
Регистрация: 28.05.2017
Сообщений: 5
|
|
28.05.2017, 22:46 [ТС] | 7 |
ФедосеевПавел, спасибо
0
|
0 / 0 / 0
Регистрация: 28.05.2017
Сообщений: 5
|
|
30.05.2017, 20:11 [ТС] | 8 |
ФедосеевПавел, Обычный паскаль работает, но с ассемблером нет, просто выводит тоже самое без перестановки
0
|
Модератор
|
|
31.05.2017, 10:51 | 9 |
Скомпилировал исходник из сообщения #6.
Результат нескольких прогонов на скриншоте.
0
|
31.05.2017, 10:51 | |
31.05.2017, 10:51 | |
Помогаю со студенческими работами здесь
9
Все положительные элементы массива поставить в обратном порядке, не нарушая расположения остальных Сложить отдельно положительные и отрицательные элементы массива Сортировка массива: в начале - все отрицательные, затем - нулевые, в конце - все положительные ( с сохранением порядка) [Masm] Записать отрицательные элементы массива в его начале, а положительные в конце Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |