Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2002.12.26;
Скачать: [xml.tar.bz2];

Вниз

Поиск в массиве.   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.007 c
1-85885
Кокандокало
2002-12-16 19:44
2002.12.26
Большой объем данных в TTreeView и проблемы с их перерисовкой


14-86179
Zombik666
2002-11-26 11:20
2002.12.26
Не могу поставить Delphi 5 под Windows 2000


1-85922
Jeka
2002-12-09 12:23
2002.12.26
tray


3-85805
Mishel
2002-12-06 11:12
2002.12.26
Как отсортировать запрос объединенный через UNION


3-85873
Tip
2002-12-09 00:59
2002.12.26
Запись изменений таблиц на диск





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский