Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/16: Рейтинг темы: голосов - 16, средняя оценка - 4.50
stas9In
2 / 2 / 0
Регистрация: 18.11.2010
Сообщений: 3
#1

Удалить элементы массива, имеющие одинаковые значения

18.11.2010, 15:54. Просмотров 2820. Ответов 9
Метки нет (Все метки)

Помогите дописать программу, я составил примерно, но плохо в этом всем понимаю.

Удалить элементы массива А(I) имеющие одинаковые значения. I=1,2,..,10, Определить количество оставшихся элементов.

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
masm
model small
.stack 256
.data
len equ 10
n db 1,2,3,4,5,6,7,8,9,10
.code
start:   
    mov ax, @data        
    mov ds, ax
    mov count, 10
    xor si, di
    jcxz    exit
cikle1:
    xor ax, ax
    cmp n[si], n[di]
    je 
    jmp m
    
cikle2:
    inc si
    cmp si, di
    jne cikle1
    jmp exit
    
m:
    mov di, si
perem:
    mov bh, n[di+1]
    mov n[di], bh
    inc di
    mov cx, di
    inc cl
    cmp cl, count
    jne perem
    dec count
    dec si
    mov dl, count
    mov di, dx
    mov n[di], 0
    jmp cikle2
    
exit:
    mov     ax, 4c00h        
    int     21h     
 
end start
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2010, 15:54
Ответы с готовыми решениями:

Обнулить элементы массива имеющие одинаковые значения
Прошу помощи по задачке на ассемблере. Задача звучит так. Обнулить элементы...

Все элементы массива, не равные нулю, переписать, сохраняя их порядок, в начало массива, а нулевые значения - в конец
Создать одномерный массив A. Все его элементы, не равные нулю, переписать,...

Удалить из строки слова, имеющие определенную букву
Удалить из строки слова, имеющие определенную букву, например D. Строка задана...

Удалить элементы массива между минимальным и максимальным
Добрый день, в задании нужно удалить элементы массива, между минимумом и...

Удалить из одного массива элементы которые есть во втором
Нужно удалить из одного массива элементы которые есть во втором Этот код...

9
Mikl___
Автор FAQ
11731 / 6043 / 543
Регистрация: 11.11.2010
Сообщений: 11,027
19.11.2010, 10:55 #2
stas9In, твоя задача решается в три этапа
1) Поиск повторяющихся элементов. Берем первый элемент массива и последовательно сравниваем его с остальными элементами. Если находим совпадающий, то заменяем его значение на 0FFh. Потом берем второй элемент массива и так до тех пор пока не проверим все элементы, а повторяющиеся значения не заменим на 0FFh
2) Удаление повторяющихся элементов. Все элементы со значением равным 0FFh сдвинем в конец массива. Ищем элемент равный 0FFh, если у элемента справа значение не равно 0FFh, тогда обмениваем их значения, если произошел обмен делаем регистр BX=1 проходим всю строку до последнего элемента. Если был хоть один обмен, тогда возвращаемся в начало массива, если BX=0 значит все элементы стоят на своих местах.
3) Запоминаем в SI адрес начала массива. Ищем первый элемент со значением 0FFh его адрес равен DI-1. количество элементов с неповторяющимися значениями равно DI - SI - 1
Всё! А вот код
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
.286
.model tiny
.code
start:
; ищем повторяющиеся элементы и заменяем их на 0FFh
    mov cx,lenth+1
    mov bx,offset array 
a2: push cx
    mov al,[bx]
    cmp al,0FFh
    je a1
    mov di,bx
    inc di
a0: repne scasb
    jcxz a1
    mov byte ptr [edi-1],0FFh
    loop a0
a1: inc bx
    pop cx
    loop a2
; ищем элемены отличающиеся от 0FFh и сдвигаем их в начало массива
; таким образом происходит удаление из массива повторяющихся элементов
    mov al,0FFh
a5: xor bx,bx
        mov cx,lenth
    mov di,offset array 
a4:     repne scasb
        jcxz a3
    cmp al,[di]
    je a4
    xchg al,[di]
    xchg al,[di-1]
        mov bl,1
        jmp a4
a3: cmp bx,1
    jz a5
; ищем первый элемент с кодом 0FFh, отнимаем от его адреса адрес начала 
;массива, таким образом мы определяем количество оставшихся элементов.
        mov cx,lenth
    mov di,offset array 
    mov si,di
    repne scasb
    sub di,si
    dec di
    ret
array db 1,2,1,1,4,2,7,4,1,10
lenth = $ - array
end start;конец программы
2
stas9In
2 / 2 / 0
Регистрация: 18.11.2010
Сообщений: 3
20.11.2010, 11:04  [ТС] #3
Спасибо большое, но у меня при компиляции выдает ошибку
Undefided symbol: EDI
в строчке mov byte ptr [edi-1],0FFh
1
Mikl___
Автор FAQ
11731 / 6043 / 543
Регистрация: 11.11.2010
Сообщений: 11,027
22.11.2010, 03:24 #4
stas9In, замени edi на di
2
tahir_
159 / 100 / 25
Регистрация: 18.05.2015
Сообщений: 474
20.04.2016, 20:10 #5
Mikl___, нашел выход за пределы массива,
посмотри на cx после a0, когда находим элемент
0
R71MT
3213 / 1274 / 284
Регистрация: 29.07.2014
Сообщений: 2,295
Записей в блоге: 5
21.04.2016, 07:59 #6
Цитата Сообщение от stas9In Посмотреть сообщение
Удалить элементы массива А(I) имеющие одинаковые значения.
В дополнение к варианту Mikl___, можно отсортировать массив, и удалить одинаковые элементы.
В этом случаем задачка решится в 2 прохода..
0
Mikl___
Автор FAQ
11731 / 6043 / 543
Регистрация: 11.11.2010
Сообщений: 11,027
21.04.2016, 09:38 #7
Цитата Сообщение от tahir_ Посмотреть сообщение
нашел выход за пределы массива
tahir_,
я и не думал, что пост созданный в 2010 году кому-то понадобится...
0
R71MT
3213 / 1274 / 284
Регистрация: 29.07.2014
Сообщений: 2,295
Записей в блоге: 5
21.04.2016, 10:28 #8
..и я чтот внимания не обратил. Походу Vikenty все карты спутал..
0
tahir_
159 / 100 / 25
Регистрация: 18.05.2015
Сообщений: 474
21.04.2016, 11:59 #9
Mikl___, R71MT, ко мне обратился товарищ из соц. сетей, типа у меня есть пример но он не работает, и один в один этот, вспомнил и написал
1
Mikl___
21.04.2016, 13:05     Удалить элементы массива, имеющие одинаковые значения
  #10

Не по теме:

tahir_,
я рад, что фрагменты моих программ цитируют в соцсетях :good:

0
21.04.2016, 13:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2016, 13:05
Привет! Вот еще темы с ответами:

В массиве удалить элементы, меньшие среднего арифметического элементов массива
"В массиве удалить элементы, меньшие среднего арифметического элементов...

Удалить из массива все элементы, которые встречаются больше двух раз
Дан целочисленный массив размера N. Удалить из массива все элементы, которые...

Из массива удалить все нулевые элементы, кроме первого нулевого элемента
Помогите сделать задание : Из массива удалить все нулевые элементы, кроме...


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

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

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