Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
3 / 2 / 1
Регистрация: 21.04.2015
Сообщений: 57

Двоичный поиск с вставкой не найденного элемента

28.09.2016, 08:55. Показов 1516. Ответов 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
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
Двоичный поиск в массиве Arr значения Y 
           .model tiny      ; модель памяти, используемая для COM        
   
           .code                ; начало сегмента кода
 
            org 100h          ; начальное значение счетчика - 100h
start:
            lea di,Arr          ; в di адрес начала массива
            Mov Bx, Y         ; в Bx искомое значение
            Xor Cx,Cx         ;  Cx=0 -- не нашли 
            Cmp Bx,[di]      ; Y <=Arr[1] ?
            Ja  Chk_last     ; нет, сравнить с последним
            Je Eq_1            ; равно первому?        
            jmp Output       ; нет в массиве -- вывод результата
Eq_1:     
            inc Cx                ; Cx=1 --нашли
            jmp Output        ;         
 
Chk_last: 
            Mov Si,n          ; в Si количество элементов массива
            dec Si              
            Shl Si,1           ; в Si длина массива в байтах
            Add Si,di         ; в Si адрес последнего элемента  
            Cmp bx,[si]     ; Arr[n]>=Y?
            Jb search       ; нет, искать в середине 
            Je Eq_n          ;  равно последнему    
           
            jmp Output     ; нет в массиве, больше последнего
 
Eq_n:      
             inc Cx            ; нашли = последнему    
            jmp Output;
 
        ;поиск внутри массива
search:
           Mov Si, n          ; в si смещение на половину массива
Iven_inx: 
           Test Si,1          ; проверка на четность
           Jz Add_inx       ; 
           Inc Si               ; сделать четным
 
Add_inx: 
           Add di,si          ; в di адрес очередного элемента
Compare:
           Cmp Bx,[di]        ; Arr[i] = Y?
           Je All_done        ; нашли
           Ja Higer           ; выбрать отрезок для продолжения поиска
       ; искать в левой части
           Cmp Si,2           ; не закончились элементы?         
           Jne inx_ok         ;          
           
no_match:     
           jmp Output         ;не нашли
 
inx_ok: 
           Shr Si,1           ; разделить индекс на 2
           Test Si,1         ; проверить на четность Si 
           Jz Sub_inx           
           Inc Si               ; сделать четным
Sub_inx: 
           Sub di,si          ; в di  адрес очередного элемента
           Jmp Compare        
       
       ; искать в правой части
           
Higer:
          Cmp Si,2          ; не закончились элементы?         
          je no_match     ; да - выход         
          Shr Si,1            ; разделить индекс на 2
          Jmp  Iven_inx      
      
          
All_done :
           inc Cx             ;   нашли
 
      ; вывод результата         
Output: 
            mov ah,9           ;
           Test Cx,1          ;
           Jz Send_no         ; 
Send_yes:
           mov dx,offset Res_yes  ;
           Jmp Print
Send_no: 
           mov dx,offset Res_no  ;
Print:
           int 21h            ;
           ret                ;
 
Arr         dw 1,12,33,41,55
Y           dw 33
n           dw 5
Res_yes     db 'Value exist'
            db 0Dh,0Ah,'$'
Res_no      db 'Value not found'
            db 0Dh,0Ah,'$'
 
           end start
Нашел нечто подобное, нужно подпилить под данное тз.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.09.2016, 08:55
Ответы с готовыми решениями:

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

Реализуйте двоичный поиск элемента X в массиве A
Дан массив A размера N и значение X. Реализуйте двоичный поиск элемента X в массиве A, предварительно отсортировав массив методом выбора...

Рекурсии. Двоичный поиск элемента в массиве
В общем надо разработать рекурсивную процедуру двоичного поиска элемента массива, равного заданному числу. В Delphi

1
 Аватар для ture
553 / 361 / 206
Регистрация: 27.11.2014
Сообщений: 1,049
28.09.2016, 10:33
Лучший ответ Сообщение было отмечено Hazar2015 как решение

Решение

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
    .model flat
includelib msvcrt.lib
printf proto c ,:vararg
    .data
x   db -27    ; то, что будем искать
 
m   equ 5
n   equ 3
k   equ m*n ; количество элементов во всем массиве
i=-30       ; инициализация массива: -30, -28, ..... (mxn)
mas db i
rept k-1 
i=i+2
    db i
endm
 
str_empty db 'not find',13,10,0
str_find  db '%4hd',0
str_endl  db 13,10,0
 
    .code
public main
main proc
    ; берем искомый элемент
    mov ch, x
    
    ; бинарный поиск   
    xor al, al   ; индексы начала (al) и конца (ah)
    mov ah, k-1 
bin_serch:
    ; убедимся, что есть еще не проверенные элементы
    cmp al, ah  
    jg empty
    
    ; получаем индекс среднего элемента cl = a + (b-a)/2
    movzx ebx, ah 
    sub bl, al
    shr bl, 1
    add bl, al
 
    ; проверяем
    cmp mas[ebx], ch
    je find 
    jg left
 
    ; берем правый фрагмент
    mov al, bl  
    inc al  
    jmp bin_serch
 
    ; берем левый фрагмент
left:
    mov ah, bl  
    dec ah
    jmp bin_serch
 
 
find:
    ; печать 2-x мерного массива
    mov ebx, -n
row:add ebx, n
    cmp ebx, m*n
    jae quit
    invoke printf, addr str_endl
 
    mov esi, -1
col:inc esi
    cmp esi, n
    je row
    movsx ax, mas[ebx+esi]
    invoke printf, addr str_find, ax
    jmp short col
 
empty:
    invoke printf, addr str_empty
 
quit:   
    xor ax, ax
    ret
main endp
end
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.09.2016, 10:33
Помогаю со студенческими работами здесь

Двоичный поиск элемента в типизированном файле
Ребят, помогите плз, оч нужно написать&quot; Двоичный поиск элемента в типизированном файле из 14-15 программ по значению!!!

Двоичный (бинарный) поиск элемента в двумерном массиве
Доброго времени суток. есть вот такое задание: Написать функцию, реализующую алгоритм бинарного поиска заданного ключа в двухмерном...

Двоичный поиск в массиве ВСЕХ вхождений искомого элемента
У Вики есть такой чудесный код: def check(x, m): return x &lt; m def binSearch(lst, x): # lower_bound l = 0 r =...

Функция поиска в массиве и указатели + функция сортировки и поиск найденного элемента
Написать функцию поиска максимального элемента, передать в неё указатель на начало и конец поиска и возвращать указатель на найденный...

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru