Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.191.13.255] |
|
Сообщ.
#1
,
|
|
|
Здравствуйте. Помогите, пожалуйста, с задачей: Если минимальный элемент вектора является четным числом, то отсортировать элементы вектора по убыванию.
Вот я сделал, чтобы сортировало для последнего элемента вектора: Dseg segment para public 'data' mas db -1,3,5,2,-7 n dw 5 min db ? Dseg ends Sseg segment para stack 'stack' dw 30 dup(0) Sseg ends Cseg segment para public 'code' osn proc near assume c s:cseg,ds:dseg,ss:sseg mov a x,dseg mov d s,ax mov cx,n ;cx=n mov al, mas ;al=mas[0] mov di,0 ;di=0 start: cmp al, mas[di] jle met mov al, mas[di] met: inc di loop start mov min, al mov ax, 4c00h int 21h osn endp cseg ends end osn Как это нужно переделать под мою задачу? |
Сообщ.
#2
,
|
|
|
Цитата Andrey_2019 Это не сортировка! Это только поиск минимального.Вот я сделал, чтобы сортировало для последнего элемента вектора: Далее можно схематично так: mov min, al test al, 1 ;проверяем, чётный ли jnz vihod ; нечётный - выходим ; здесь - сама сортировка sort: mov cx, n ; можно пузырьком: нашли минимальный, записали его индекс ; поменяли минимальный с хвостовым dec n ; уменьшили длину массива для просмотра jnz sort ; массив не кончился - снова запустим поиск минимального vihod: mov ax 04C00h ... |
Сообщ.
#3
,
|
|
|
Вот, я переделал:
Dseg segment para public 'data' mas db -1,3,5,2,-7 n dw 5 min db ? Dseg ends Sseg segment para stack 'stack' dw 30 dup(0) Sseg ends Cseg segment para public 'code' osn proc near assume c s:cseg,ds:dseg,ss:sseg mov a x,dseg mov d s,ax mov cx,n ;cx=n mov al, mas ;al=mas[0] mov di,0 ;di=0 start: cmp al, mas[di] jle met mov al, mas[di] met: inc di loop start mov min, al test al, 1 ;проверяем, чётный ли jnz vihod ; нечётный - выходим ; здесь - сама сортировка sort: mov cx, n ; можно пузырьком: нашли минимальный, записали его индекс ; поменяли минимальный с хвостовым dec n ; уменьшили длину массива для просмотра jnz sort ; массив не кончился - снова запустим поиск минимального vihod: mov ax 04C00h int 21h osn endp cseg ends end osn Выдаёт следующие ошибки: **Error** lab4_3.ASM(11) Need colon **Error** lab4_3.ASM(12) Undefined symbol A *Warning* lab4_3.ASM(12) Argument needs type override **Error** lab4_3.ASM(13) Undefined symbol D *Warning* lab4_3.ASM(13) Argument needs type override **Error** lab4_3.ASM(18) Near jump or call to different CS **Error** lab4_3.ASM(21) Near jump or call to different CS **Error** lab4_3.ASM(24) Near jump or call to different CS **Error** lab4_3.ASM(31) Near jump or call to different CS **Error** lab4_3.ASM(32) Too few operamds to instruction |
Сообщ.
#4
,
|
|
|
Эх, хоть бы после "mov ax" запятую поставили, чтобы было меньше сомнений к фразе "Вот я сделал, чтобы сортировало"...
|
Сообщ.
#5
,
|
|
|
Цитата Andrey_2019 @ Ощущение, что небрежно скопипастил. Иначе такую муть не прислал бы. Вот, я переделал |
Сообщ.
#6
,
|
|
|
Всё, спасибо, теперь всё работает, просто реально коряво скопипастил
|