Текущий архив: 2002.12.26;
Скачать: CL | DM;
ВнизПоиск в массиве. Найти похожие ветки
← →
Separator (2002-12-06 11:10) [0]Допустим существует массив из n-го количесва элементов типа integer, все разные. Есть ли в Delphi уже готовая функция, которая производит поиск в массиве нужного числа и возврощает его позицию?
← →
MBo (2002-12-06 11:13) [1]да, называется For
← →
Skier (2002-12-06 11:16) [2]>MBo
:)
← →
Separator (2002-12-06 11:16) [3]:) Спасибо, это я знаю, но хотелось бы посмотреть и что-нибудь другое
← →
Separator (2002-12-06 11:18) [4]А на asm кто-нибудь сможет это реализовать?
← →
Anatoly Podgoretsky (2002-12-06 11:21) [5]Separator © (06.12.02 11:16)
Другое? Ну тогда while
← →
Виктор Щербаков (2002-12-06 11:21) [6]...или Until
← →
Anatoly Podgoretsky (2002-12-06 11:21) [7]Конечно, я даже знаю людей которые только на асме и могут это реализовать, ну у всех бывают недостатки.
← →
MBo (2002-12-06 11:24) [8]вряд ли на asm будет намного быстрее, однако загляни сюда
http://delphibase.endimus.com/?action=viewfunc&topic=mathsearch&id=10160
← →
Separator (2002-12-06 11:26) [9]for, while, repeat это конечно круто, но я б хотел чего-нибудь попроще типа:
function Find(Ar: array of integer; Value): integer;
asm
...
end;
← →
Skier (2002-12-06 11:27) [10]>Separator
Ну дык...смотри ссылку MBo © (06.12.02 11:24)
← →
Separator (2002-12-06 11:29) [11]
> MBo © (06.12.02 11:24)
А как переделать? Чтоб в результате была позиция этого числа.
← →
Separator (2002-12-06 12:11) [12]Ну так что?
Вот эта функция, осталось ее только переделать.
unction Among(N: Integer; const Values: array of Integer):LongBool;
asm
push ebx
xor ebx, ebx
@@10:
test ecx, ecx
jl @@30
cmp eax, [edx]
jne @@20
not ebx
jmp @@30
@@20:
add edx, 4
dec ecx
jmp @@10
@@30:
mov eax, ebx
pop ebx
end;
Повторюсь, в результате должна возвращаться позиция числа N в массиве.
← →
Виктор Щербаков (2002-12-06 12:46) [13]function Among(N: Integer; const Values: array of Integer): Integer;
asm
push ebx
mov ebx, ecx
@@10:
test ecx, ecx
jl @@40
cmp eax, [edx]
jne @@20
sub ebx, ecx
mov eax, ebx
jmp @@30
@@20:
add edx, 4
dec ecx
jmp @@10
@@40:
mov eax, -1
@@30:
pop ebx
end;
← →
MBo (2002-12-06 12:48) [14]function NPos(N: Integer; const Values: array of Integer):integer;
asm
push ebx
mov ebx, edx
@@10:
test ecx, ecx
jl @@40
cmp eax, [edx]
je @@30
add edx, 4
dec ecx
jmp @@10
@@30:
mov eax, edx
sub eax, ebx
shr eax,2
jmp @@50
@@40:
mov eax,-1
@@50:
pop ebx
end;
← →
Separator (2002-12-06 12:56) [15]эээ спасибо, а чей более эффективный?
← →
Separator (2002-12-06 13:34) [16]моногочислиными тестами было ваяснено, что вариант Виктора Щербакова более поизводителен, но правда на небольшое значение.
← →
Виктор Щербаков (2002-12-06 13:36) [17]Separator © (06.12.02 13:34)
Делать тебе нечего :)
← →
Separator (2002-12-06 13:38) [18]:)
А теперь усложню задачу. Нужно чтоб все это работало на сях под Linux (хотя это не имеет значения)
← →
Ketmar (2002-12-06 14:25) [19]а на счетах вам не надо?
Satanas Nobiscum! 06-Dec-XXXVII A.S.
← →
AL2002 (2002-12-06 14:29) [20]Как вариант могу предложить добавить все элементы массива в строку (с разделителями, конечно) и делать поиск в строке.
А чтоб возвратить позицию, нужно будет. чтобы в строку вписывалась и позиция.
Кстати, а почему бы стринглист не использовать? Там всё круто.
← →
AL2002 (2002-12-06 14:31) [21]
> Ketmar © (06.12.02 14:25)
>
:))))))))))))
← →
Виктор Щербаков (2002-12-06 14:36) [22]AL2002 © (06.12.02 14:29)
А еще можно в таблицу БД запихать и select из этой таблицы :)
Нормальные люди, вообще-то for используют.
← →
Ketmar (2002-12-06 14:39) [23]2AL2002:
фигня. надо поставить MS SQL, перегнать массив в таблицу, а дальше простым SELECT"ом можно все, что угодно делать.
Satanas Nobiscum! 06-Dec-XXXVII A.S.
← →
Ketmar (2002-12-06 15:07) [24]упс. до меня уже предложили %-)
Satanas Nobiscum! 06-Dec-XXXVII A.S.
← →
AL2002 (2002-12-06 15:42) [25]
> Ketmar © (06.12.02 15:07)
> упс. до меня уже предложили %-)
Значит это — ИДЕЯ! :)
← →
MrBeer (2002-12-07 05:36) [26]a hash-ed list po ljubomu bistree budet - skorost" O(1) protiv O(n) u obichnogo masiva
Страницы: 1 вся ветка
Текущий архив: 2002.12.26;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.006 c