Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для Troll_Face
608 / 406 / 8
Регистрация: 26.04.2012
Сообщений: 2,065

Переместить все отрицательные элементы в начало массива, а положительные в конец

08.12.2012, 16:39. Показов 1649. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
переместить все отрицательные элементы в начало массива, а положительные в конец, при этом не меняя порядка следования ни отрицательных, ни положительных
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
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
.model small
.stack 100h
.data 
    bb db 'aaaaaaaaaaa'
    vector1 dw 5 dup (?)
    aa db 'aaaaaaaaaaa'
    vector2 dw 4 dup (?)
    array dw 4*4*2 dup (?)
    buff    db 100, 101 Dup(?)
    nl db 13, 10, '$'
    vec1 db 13, 10, 'Vector 1: $'
    vec2 db 13, 10, 'Vector 2: $'
    text1 db 'vvevite 16 chisel cherez probel:', 13, 10, '$'
    text2 db 'Massiv:', 13, 10, '$'
    text3 db 13, 10, 'Preobrazovanniy massiv: $'
.code
start:
    mov ax, @data
    mov ds, ax
    mov es, ax
;_-----------------------------------------------------------
;вводим массив  
    mov dx, offset text1
    mov ah, 9
    int 21h
    mov si, offset array
    call inputint
;===============================================================
;выводим в виде матрицы  
    mov dx, offset text2
    mov ah, 9
    int 21h
    mov si, 0               ;смещение элемента  относительно физического адреса массива
    mov cx, 4               ;кол-во строк
@@1:
    push cx                 ;сохраним внешний счетчик
    mov cx, 4               ;кол-во столбцов
@@2:
    mov dl, ' '             ;в dl поместим пробел
    mov ax, array[si]           ;в ах очередной элемент массив
    call OutInt             ;выводим
    mov ah, 2               ;выведем пробел
    int 21h                 
    add si, 2                   ;следующий элемент
    loop @@2                    ;повторим
    mov dx, offset nl           ;переводим строку
    mov ah, 9
    int 21h
    pop cx                      ;восстановим счетчик внешних циклов
    loop @@1                    ;повторим
;======================================================================
;составляем векторы из диагоналей матрицы
    mov si, 0
    mov cx, 4
    mov bx, 0
@v1:                                ;вектор 1
    mov ax, array[si+bx]
    mov vector1[bx], ax
    add si, 8
    add bx, 2
    loop @v1
 
    mov si, 0
    mov cx, 4
    mov bx, 6
    xor di, di
@v2:                                ;вектор 2
    mov ax, array[si+bx]
    mov vector2[di], ax
    add si, 8
    sub bx, 2
    add di, 2
    loop @v2
;--------------------------------------------
;выводим векторы
    mov dx, offset vec1
    mov ah, 9
    int 21h
    mov dl, ' '
    xor bx, bx
    mov cx, 4
out_v1:
    mov ax, vector1[bx]
    call OutInt
    mov ah, 2
    int 21h
    add bx, 2
    loop out_v1
    
    mov dx, offset vec2
    mov ah, 9
    int 21h
    mov dl, ' '
    mov cx, 4
    xor bx, bx
out_v2:
    mov ax, vector2[bx]
    call OutInt
    mov ah, 2
    int 21h
    add bx, 2
    loop out_v2
;=======================================================
;преобразуем 1 массив
    xor bx, bx
    mov cx, 4
    xor dx, dx
   [MENTION=285084]TeSt[/MENTION]:
    cmp vector1[bx], 0
    jge @no_change
    push cx
    mov cx, 4
    mov si, offset vector1
    mov di, si
    add si, 6
    add di, 8
    std
    rep movsw
    mov ax, vector1[bx+2]
    xchg bx, dx
    mov vector1[bx], ax
    xchg dx, bx
    mov si, offset vector1
    add si, bx
    add si, 2
    mov di, si
    add si, 2
    pop cx
    push cx
    cld
    rep movsw
    pop cx
    add dx, 2
@no_Change:
    add bx, 2
    loop   [MENTION=285084]TeSt[/MENTION];
 
    mov ah, 9
    mov dx, offset text3
    int 21h
    mov si, offset vector1
    mov dl, ' '
    mov cx, 4
@write:
    mov ax, [si]
    Call OutInt
    mov ah, 2
    int 21h
    add si, 2
    loop @write
    
    xor ax, ax
    int 16h
    mov ax, 4C00h
    int 21h
    
    
;=====================================================================      
;вспомогательные подпрограммы
OutInt proc                 ;число для вывода должно быть в ах
    push cx             ;сохраним регистры
    push dx
    push bx
    test    ax, ax
   jns     oi1
 
; Если оно отрицательное, выведем минус и оставим его модуль.
   mov  cx, ax
   mov     ah, 02h
   mov     dl, '-'
   int     21h
   mov  ax, cx
   neg     ax
; Количество цифр будем держать в CX.
oi1:  
    xor     cx, cx
    mov     bx, 10 ; основание сс. 10 для десятеричной и т.п.
oi2:
    xor     dx,dx
    div     bx
; Делим число на основание сс. В остатке получается последняя цифра.
; Сразу выводить её нельзя, поэтому сохраним её в стэке.
    push    dx
    inc     cx
; А с частным повторяем то же самое, отделяя от него очередную
; цифру справа, пока не останется ноль, что значит, что дальше
; слева только нули.
    test    ax, ax
    jnz     oi2
; Теперь приступим к выводу.
    mov     ah, 02h
oi3:
    pop     dx
; Извлекаем очередную цифру, переводим её в символ и выводим.
;; раскоментировать если основание сс > 10, т.е. для вывода требуются буквы
;   cmp     dl,9
;   jbe     oi4
;   add     dl,7
;oi4:
    add     dl, '0'
    int     21h
; Повторим ровно столько раз, сколько цифр насчитали.
    loop    oi3
    pop bx          ;восстановим ренистры
    pop dx
    pop cx
    ret
OutInt endp
;================================================================================
InputInt proc       ;вводимые числа помещаются в массив по адресу в si
    push si         ;сохраним регистры
    push di
    push ax
    push bx
    push cx
    push dx
    push bp
;вводим числа (строку)
    mov ah,0ah
    xor bp, bp
    mov dx,offset buff ; аддрес буфера
    int 21h ; принимаем строку
    mov dl,0ah
    mov ah,02
    int 21h ; выводим перевода строки
    
; обрабатываем содержимое буфера
    mov di,offset buff+2 ; берем аддрес начала строки
@1: xor bp, bp
    cmp byte ptr [di],"-" ; если первый символ минус
    jnz ii1
    mov bp, 1  ; устанавливаем флаг
    inc di    ; и пропускаем его
ii1:
    xor ax,ax
    mov bx,10  ; основание сc
ii2:
    mov cl,[di] ; берем символ из буфера
    mov ch, 0ffh        ;установим флаг конца строки (если это не конец, то далее сбросим его)
    cmp cl,0dh  ; проверяем не последний ли он
    jz endin
    xor ch, ch          ;сбрасываем флаг конца строки
    cmp cl, ' '  ;пробел ли это?
    je probel
; если символ не последний и не пробел, то проверяем его на правильность
    cmp cl,'0'  ; если введен неверный символ <0
    jl er
    cmp cl,'9'  ; если введен неверный символ >9
    ja er
    
    sub cl,'0' ; делаем из символа число 
    mul bx     ; умножаем на 10
    add ax,cx  ; прибавляем к остальным
    inc di     ; указатель на следующий символ
    jmp ii2     ; повторяем
 
er:   ; если была ошибка, то выходим
    int 20h
probel:
    push ax     ;сохраним число
    mov al, cl      ;поместим в al код пробела
    cld             ;сбросим флаг d (автоувеличение si и di)
    repe scasb      ;пропустим все пробелы
    dec di          ;установим di на символ, следующий за всеми пробелами
    pop ax              ;восстановим число
endin:
    cmp bp,1 ; если установлен флаг, то 
    jnz ii3
    neg ax   ; делаем число отрицательным
    
ii3:                    
    mov [si], ax            ;сохраним число в буфер
    or ch, ch               ;флаг конца строки установлен?
    jne @exit               ;если да, то на выход
    add si, 2               ;следующий элемент массива
    jmp @1                  ;повторим ввод
@exit:
    pop bp              ;восстановим все регистры
    pop dx
    pop cx
    pop bx
    pop ax
    pop di
    pop si
    ret
InputInt endp
end start
прога работает для одного числа, и вроде для двух, но вот для двух отрицательных проблема...

Добавлено через 18 часов 29 минут
никто не знает?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.12.2012, 16:39
Ответы с готовыми решениями:

Для каждого из массивов все отрицательные элементы переместить в начало массива, а все положительные — в конец
Составить программу, которая превращает массивы А и В следующим образом: для каждого из них все отрицательные элементы одномерного...

Переместить положительные элементы в начало массива, отрицательные в конец
1 Одномерный целочисленный массив. Превратить данный массив таким образом, чтобы сначала шли все положительные элементы, а затем...

Положительные элементы массива переместить в начало, а отрицательные — в конец
Дана последовательность чисел неизвестной длинны. Нужно заполнить массив этими числами, а потом в отдельной функции положительные элементы...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.12.2012, 16:39
Помогаю со студенческими работами здесь

Последовательно переместить все отрицательные элементы списка в его начало, а положительные - в конец
1314 Дан список из n целых чисел a1, a2,..., an. Последовательно переместить все отрицательные элементы списка в его начало, а все...

Все отрицательные элементы переместить в начало массива, а остальные — в конец
Здравствуйте, помогите пожалуйста решить задачу на языке VBA, на делфи частично могу сделать, но в VBA совершенно не понимаю. Заранее...

В массиве все отрицательные элементы переместить в начало массива а остальные в конец
В одномерном массиве все отрицательные элементы перемещаются в начало массива а остальные в конец ,с сохранить порядок следования . Доп....

В одномерном массиве все отрицательные элементы переместить в начало массива, а остальные – в конец
В одномерном массиве все отрицательные элементы переместить в начало массива, а остальные – в конец с сохранением порядка следования. Не...

Все положительные элементы массива поставить в начало, а отрицательные - в конец
Помогите решить такую задачу пжл: дан одномерный массив &quot;а&quot; (состоящий из вещественных чисел). Необходимо пройдя по массиву один раз все...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru