Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Ivashka_alkashk
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 5
1

Найти за один проход два максимума в массиве

22.04.2016, 23:31. Просмотров 227. Ответов 0
Метки нет (Все метки)

1) найти за один проход два максимума в массиве;
2) переставить в обратном порядке элементы массива, находящиеся между этими максимумами;
3) удалить эти максимумы.
(первое работает, второе наполовину, третье не написано; помогите чем можете люди добрые)

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
include 'emu8086.inc'
data segment
    mas dw 8 DUP(?) 
    pos1 dw ?
    pos2 dw ?
    razmernost dw 8                      
ends
        stack segment
        dw   128  dup(0)
ends
code segment
start:   mov ax, data
    mov ds, ax
    mov es, ax
;___________Vvod___________   
xor ax, ax
xor si, si
xor cx,cx 
mov ax,0    
        mov cx, razmernost 
               
vvod2:  push cx;koli4estvo prohodov ravno razmernosti 
    CALL   pthis
            Db  13, 10, 'el ', 0 
            CALL   print_num;vivod nomera elementa 
     Print ' : '
            call SCAN_NUM;vvod elementa           
            mov mas[si], cx;vvod elementa v massiv      
            add si,2;perehod k sledyes4emy elementy      
            inc ax ;yvele4enie nomera elementa
            pop cx
            loop vvod2                                                       
call pthis 
      db 13,10, ' Massiv: ', 0  
      
      
      ;________Vivod________________________________________________________________ 
 
xor si, si 
mov cx, razmernost      ;koli4estvo prohodov rovno razmernosti
vivod1:mov ax, mas[si]  ;zanosim v ax element massiva
      add si, 2         ;perehodim k sledyes4emy elementy massiva  
      CALL   print_num; vivodim element massiva  
      Print ' '
      loop vivod1 
      ;____________________________________________________
  xor ax,ax                                                               
    mov cx,razmernost
    dec cx
    xor si,si
    mov ax,mas[si]
    cmp ax,0
    jns max13
    neg ax
max13:   inc si  
        inc si
maxm:   mov bx,mas[si]
    cmp bx,0
    jl MAXMAX
    jns max1
    neg bx       
max1:     cmp ax,bx
        jg MAXMAX
        mov ax,bx
        mov dx,si
        mov di,si 
MAXMAX: inc si
     inc si
     loop maxm     
 
call pthis   
            db 13,10, 'Max: ', 0  
call print_num  
          mov pos1,dx
mov ax,dx
ror ax,1
inc ax
call pthis  
            db 13,10, 'Pos max: ', 0 
call print_num   
 
 ;___________________________________________________________
     mov si, pos1   
     
     mov mas[si],0
                                                              
    mov cx,razmernost
    dec cx
    xor si,si
    mov ax,mas[si]
    cmp ax,0
    jns maxm13
    neg ax
maxm13:   inc si  
        inc si
maxmm:   mov bx,mas[si]
    cmp bx,0
    jl MAXMAXm
    jns max1m
    neg bx       
max1m:     cmp ax,bx
        jg MAXMAXm
        mov ax,bx
        mov dx,si
        mov di,si 
MAXMAXm: inc si
     inc si
     loop maxmm     
 
call pthis   
            db 13,10, 'Max: ', 0  
call print_num  
           
mov pos2,dx
mov ax,dx
ror ax,1
inc ax
call pthis  
            db 13,10, 'Pos max: ', 0 
call print_num
printn ' '
;================================================================
 
 
;============================================================                
          
          mov si,pos1
          mov di,pos2
          sub si,di
          sar si,1
          mov cx,si       
          mov bx,pos1
          dec si
          dec si
  zxcv:     
                mov ax,mas[si] 
            mov bx,mas[di]
               mov mas[si],bx
               mov mas[di],ax
          dec di
          dec di 
          
            CALL   print_num; vivodim element massiva  
      Print ' '
         cmp bx,di
          jz konec
          
          loop zxcv                        
konec: 
mov ax, 4c00h
int 21h  
 
DEFINE_SCAN_NUM
DEFINE_PRINT_STRING
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS  
DEFINE_PTHIS
DEFINE_clear_screen 
ends
ends start
ends code
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2016, 23:31
Ответы с готовыми решениями:

Найти два максимума в массиве
Добрый день, Нужна помощь, не выходит сделать программу в эмуляторе 8086 Необходимо найти два...

Найти в массиве слов два нуля, идущих подряд
Задача такова: Знайти чи є в масиві два нулі, що йдуть підряд. Масив слів. Работаю в emu8086....

В массиве имеются только два одинаковых элемента. Найти их
В массиве имеются только два одинаковых элемента. Найти их.

Нахождение минимума и максимума в массиве и вывод на экран
Пытаюсь найти максимум и вывести его на экран, но всё виснет в бесконечном цикле. В чём проблема? ...

Найти минимальное из чисел, встречающихся в целочисленном массиве ровно два раза
Прошу помощи с такой задачей, можно без ввода и вывода 26. Найти минимальное из чисел,...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2016, 23:31

В массиве найти два элемента, стоящих друг за другом, сумма которых больше максимального числа
В массиве D найти, есть ли два элемента, стоящих друг за другом, сумма которых больше максимального...

За один проход цикла найти два максимальных значения среди всех данных и удалить их
Задача: За один проход цикла найти два максимальных значения среди всех данных и удалить их. Затем...

Задача из раздела F#: Определить за один проход в массиве целых минимум и его позицию
Определить за один проход в массиве целых минимум и его позицию (позиции, если он встречается...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru