Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2010, 15:32   #1
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию Находится ли число в массиве

Частенько пользуюсь этой фукцией не задумываясь как она работает.
Код:
//Функция проверяет, находится ли число N в массиве Values

function 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;
Как она выглядит на родном дельфийском языке?
_SERGEYX_ вне форума Ответить с цитированием
Старый 12.11.2010, 15:55   #2
kangreon
Форумчанин
 
Аватар для kangreon
 
Регистрация: 03.04.2009
Сообщений: 305
По умолчанию

мб так?
Код:
function isIntArray(N: Integer; const Values: array of Integer):Boolean;
var
  i : integer;
begin
  for i := 0 to Length(Values) do
  if Values[i] = N then
  begin
    Result := True;
    Exit;
  end;
  Result := False;
end;

Последний раз редактировалось kangreon; 12.11.2010 в 16:05.
kangreon вне форума Ответить с цитированием
Старый 12.11.2010, 16:13   #3
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

kangreon, наверно так и есть.
Без цикла тут, похоже, не обойтись.
Странно, должна же быть встроенная функция для определения
принадлежит значение массиву или нет.
Эти горе-девелоперы из штата Мичиган зря хлеб едят

Последний раз редактировалось _SERGEYX_; 12.11.2010 в 16:17.
_SERGEYX_ вне форума Ответить с цитированием
Старый 12.11.2010, 16:32   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

есть встроенная, надо рыскать родные модули(как то видел просто)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.11.2010, 20:00   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Главное и есть в программирование задумываться над каждым кодом, то и есть чем глубже ты понимаешь это, тем лучше все у тебя получится!
отнюдь не всегда это нужно.
если работает, то зачем изучать асм чтоб понять как?
(да и по твоей логике надо вообще устройство компа изучать)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.11.2010, 22:33   #6
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от _SERGEYX_ Посмотреть сообщение
kangreon, наверно так и есть.
Без цикла тут, похоже, не обойтись.
Странно, должна же быть встроенная функция для определения
принадлежит значение массиву или нет.
Эти горе-девелоперы из штата Мичиган зря хлеб едят
А как вы себе представляете проверку каждых 4х байт в памяти, к примеру массива размером в 5 элементов, а значит найти и проверить 4 байта в 20и байтах в памяти? Тут по любому придется использовать перебор, а перебор это и есть цикл. А в том коде что вы привели, там тоже цикл (jmp [метка]). Не ужели это так критично для вашей задачи? Я имею ввиду перебор массива в цикле.
BOBAH13 вне форума Ответить с цитированием
Старый 13.11.2010, 10:03   #7
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Не критично. Я имел ввиду, что должна быть готовая функция типа
Код:
var X: array[0..2] of String = ('aaa','bbb','ccc');
S:='aaa';
//И далее...
if (S in X) then  //Что-то в этом роде... и пусть машина сама перебирает
_SERGEYX_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить, находится ли минимальной число выше максимального fsi Паскаль, Turbo Pascal, PascalABC.NET 1 02.06.2010 12:45
Найти в массиве наиболее часто встречающееся число. с++ lbvflbvf Общие вопросы C/C++ 52 23.05.2010 22:34
как подсчитать число дубликатов ключей в массиве vvsh PHP 2 08.02.2010 23:43
Pascal: Наиболее часто встречающееся число в массиве. MaGWaY_minsk Помощь студентам 2 20.01.2010 00:22
Найти в массиве число наиболее близокое к целому числу Willow Помощь студентам 2 16.01.2010 13:33