Найти количество различных элементов в данном массиве и вывести их на экран - Assembler

Узнай цену своей работы

Формулировка задачи:

Всем Доброго времени суток. Есть задача: Дан целочисленный массив. Найти количество различных элементов в данном массиве и вывести их на экран. Не знаю даже с чего начать. Как задать массив? просто db 1,2,2,2,2.. типо того? есть для примера код. Делающий следующее: Посчитать кол-во одинаковых цифр в массиве. Массив из однозначных чисел повторяется только одна цифра. Я совсем не могу разобраться и понять, что нужно поменять
Вопрос снят.

Решение задачи: «Найти количество различных элементов в данном массиве и вывести их на экран»

textual
Листинг программы
org 100h
Start:
    mov cl, 0
    mov ch, 0
    mov bh, 0
    mov bx, Array
    mov si, 0
    mov dl, 0
    mov di, 0
 
GetSize:
    mov ax, [bx]
    cmp al, $21
    je aa
    inc cl
    inc bx
 
    jmp GetSize
aa:
    mov bx, cx
kk:
    mov si, bx
    sub si, cx
    mov dl, [Array + si]
    add dl, '0'
    mov ah, 02h
    int 21h
    mov dl, ' '
    int 21h
    loop kk
 
    mov dx, NewLine
    mov ah, 09h
    int 21h
    mov cx, bx
 
Go:
    dec cx
 
EnterNamber:
    mov ah, $01
    int 21h
 
    mov ah, $01
    int 21h
 
Find:
    mov di, currString
    mov dx, 0
FindNumber:
    mov al, bl
    scasb
    jz IncCount
    dec di
    mov al, bh
    scasb
    jz IncCount
ContinueFind:
    loop FindNumber
 
Next:
    mov dl, [Array]
    mov [NewArray+di], dl
    inc di
    mov [NewArray+di], $21
    mov bx, NewArray
 
 
Go1:
    mov bx, cx
 
Print:
    mov si, cx
    mov dl, [NewArray + si-1]
    add dl, '0'
    mov ah, 02h
    int 21h
    mov dl, ' '
    int 21h
    loop Print
 
    mov dx, NewLine
    mov ah, 09h
    int 21h
 
 
 
    mov ah, 08h
    int 21h
 
    ret
 
NewArray db 10 dup (0)
NewLine db 13,10,'$'
Array db 1,2,3,3,0,1,7,1,2,$21

Объяснение кода листинга программы

Код выполняет следующие действия:

  1. Инициализирует регистры и счётчики.
  2. Переменная Array содержит список элементов для подсчёта (1,2,3,3,0,1,7,1,2,$21).
  3. Переменная NewArray будет использоваться для хранения уникальных значений (изначально заполняется нулями).
  4. Переменная NewLine содержит символ конца строки (13,10,'$').
  5. Переменная cx используется в качестве счётчика количества элементов в списке.
  6. Ввод имени файла с помощью функции int 21h (ввод с клавиатуры).
  7. Поиск уникальных значений в списке Array и подсчёт их количества.
  8. Вывод уникальных значений на экран.
  9. Завершение работы программы (вывод строки Press any key...). Список действий:
  10. Инициализация счётчиков cl и cx (количество уникальных значений и общее количество элементов в списке соответственно).
  11. Перебор элементов списка, начиная с первого.
  12. Если текущий элемент равен последнему (значение $21), то счётчик cx уменьшается и выполняется переход к началу цикла.
  13. Если текущий элемент меньше или равен предыдущему, то выполняется переход к следующей итерации цикла.
  14. Если текущий элемент больше предыдущего, то значение счётчика di уменьшается и выполняется переход к следующей итерации цикла.
  15. Если текущее значение в списке уникально (не равно предыдущему), то оно записывается в NewArray и увеличивается счётчик di.
  16. Если текущее значение в списке равно предыдущему, то выполняется переход к следующей итерации цикла.
  17. После завершения цикла выполняется вывод уникальных значений на экран.
  18. Завершение работы программы.

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

Оцени полезность:

7   голосов , оценка 3.429 из 5
Похожие ответы