| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > [Assembler] Сортировка массива |
| Автор: seven65 1.12.2006, 16:49 |
| Написать программу на языке Ассемблер, в которой осуществляется обработка исходного массива (10 – 15 элементов) и формирование массива результата. Размерность элементов исходного массива и массива результата – WORD. Действия для предварительной обработки элементов исходного массива выбирается из таблицы 1. Условия поэлементного формирования массива результата из таблицы 2. Выбор способов адресации выбирается из таблицы 3. 1) Способ обработки: В исходном массиве переставить элементы так, чтобы они располагались в следующем порядке. Отрицательные и положительные элементы исходного массива в порядке их расположения меняются местами. 2) Условия формирования массива результата. Элемент исходного массива помещается в массив результата если его значение: больше среднего арифметического наибольшего и последнего элемента исходного массива. После отладки программы изменить е+- для обработки данных размерности DWORD. 3) Способ адресации. Обработка исходного массива - индексная. Формирование массива результата - базовая. |
| Автор: anwe 9.12.2006, 21:35 | ||||
| По многочисленным просьбам сделал. Программка делает то, что просил. Элементы исходного массива заданы произвольно так же, как и их количество. Среднее арифметическое вычислено с использованием целочисленной арифметики, вернее используется следующее свойство: среднее арифметическое двух целых чисел будет либо целым числом либо иметь дробную часть 5/10. В условии задачи написано, чтобы элементы нового массива были больше этого среднего арифметического. Поэтому целочисленной арифметики хватает. Пусть при делении на 2 получил 5,5, что в целочисленной арифметике означает частное равно 5 плюс какой-то остаток. Значит для удовлетворения условию задачи элемент должет быть просто больше 5 (ведь 6>5,5), значит применяемое условие будет "больше". Но это для положительных чисел. Для отрицательных не так. Пусть среднее арифметическое равно -5,5. Частное равно -5. Если возмешь -4, это будет верно, но также и -5>-5,5. Значит в случае с отрицательными числами надо брать не только большие, чем частное, но и числа равные частному. Значит применяемое условие будет "больше или равно". Чтобы такой отбор сделать в одном цикле, то есть использовать одно условие, надо "оттянуть" частное, если оно отрицательное, на 1 влево, то есть уменьшить его. Для этого примера получим частное -6. Тогда одно условие "больше" можно применить и для отрицательных и для положительных чисел. Это и делает часть кода
И последнее. Для преобразования исходного массива (и нового соответственно) в размер двойных слов надо: 1. Расширить все регистры размерности слова до двойного путем дабавления е. 2. Изменить 2->4. 3. Изменить 1->2, но только в делении. В командах inc и dec ничего не менять! 4. При определении знака добить еще 16 нулей. 5. Переделать блоки вывода массивов под размерность двойных слов (это еще одно сохранение, сдиг и восстановлени выводимого символа по подобию, как это уже сделано). 6. Заменить размерности массива, нового массива и знаков (не длинн). Сам код:
Здесь сам файл. |
| Автор: seven65 12.12.2006, 01:06 |
| Спасибо!!! |