На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
  
> Работа с векторами, Доделать программу для работы с вектором
    Здравствуйте. Помогите, пожалуйста, с задачей: Если минимальный элемент вектора является четным числом, то отсортировать элементы вектора по убыванию.
    Вот я сделал, чтобы сортировало для последнего элемента вектора:
    ExpandedWrap disabled
      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

    Как это нужно переделать под мою задачу?
      Цитата Andrey_2019
      Вот я сделал, чтобы сортировало для последнего элемента вектора:
      Это не сортировка! Это только поиск минимального.
      Далее можно схематично так:
      ExpandedWrap disabled
         mov min, al
         test al, 1 ;проверяем, чётный ли
         jnz vihod ; нечётный - выходим
        ; здесь - сама сортировка
        sort:
         mov cx, n
        ; можно пузырьком: нашли минимальный, записали его индекс
        ; поменяли минимальный с хвостовым
         dec n ; уменьшили длину массива для просмотра
         jnz sort ; массив не кончился - снова запустим поиск минимального
        vihod: mov ax 04C00h
        ...
        Вот, я переделал:
        ExpandedWrap disabled
          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
          Эх, хоть бы после "mov ax" запятую поставили, чтобы было меньше сомнений к фразе "Вот я сделал, чтобы сортировало"... :yes-sad:
            Цитата Andrey_2019 @
            Вот, я переделал
            Ощущение, что небрежно скопипастил. Иначе такую муть не прислал бы.
              Всё, спасибо, теперь всё работает, просто реально коряво скопипастил
              1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0226 ]   [ 14 queries used ]   [ Generated: 25.06.21, 10:56 GMT ]