Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Проверка наличия числа в массиве

Delphi , Синтаксис , Массивы



Автор: Dimka Maslov
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> 
Функция проверяет, находится ли число N в массиве Values

Зависимости: нет
Автор:       Dimka Maslov, mainbox@endimus.ru, ICQ:148442121, Санкт-Петербург
Copyright:   Dimka Maslov
Дата:        28 мая 2002 г.
***************************************************** }

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;

Пример использования:

Among(N, [1, 2, 3, 4, 5]) 

Функция Among!

Функция Among Функция Among проверяет, есть ли заданное целое число N в массиве целых чисел Values. Функция возвращает логическое значение, указывающее на присутствие или отсутствие N в массиве.

Ассемблерный код Код функции реализован с помощью ассемблера, что обеспечивает низкоуровневую оптимизацию и эффективность. Вот разбор кода: 1. push ebx: Помещает значение регистра ebx на стек. 2. xor ebx, ebx: Инициализирует ebx в 0 (ложь). 3. @@10:: Это начало основного цикла. 4. test ecx, ecx: Проверяет, достигнуло ли счетчик ecx нуля. Если да, то прыгает к @@30. 5. cmp eax, [edx]: Сравнивает значение в eax (которое является N) с текущим элементом в массиве, указанном по адресу edx. Прыгает к @@20, если они равны. 6. jne @@20: Если сравнение неудачно, то прыгает к @@20. 7. not ebx: Устанавливает ebx в 1 (истина), если N найден в массиве. 8. jmp @@30: Прыгает к концу функции. 9. @@20:: Это метка, обозначающая начало внутренней логики цикла. 10. add edx, 4: Увеличивает адрес текущего элемента в массиве на 4 (размер целого числа). 11. dec ecx: Уменьшает счетчик ecx. 12. jmp @@10: Цикл возвращается к @@10, пока не достигнет конца массива. 13. @@30:: Это метка, обозначающая конец функции. 14. mov eax, ebx: Копирует значение в ebx (результат) в регистр возвращаемого значения eax. 15. pop ebx: Возвращает значение с стека и восстанавливает оригинальное значение ebx.

Пример использования Как показано в примере использования кода:

Among(5, [1, 2, 3, 4, 5])

Это вернет True, указывая на то, что 5 присутствует в массиве.

Альтернативное решение Если вам не нужно низкоуровневая оптимизация, предоставляемая ассемблером, вы можете реализовать эту функцию с помощью встроенного метода Delphi Contains:

function Among(N: Integer; const Values: TArray<Integer>): Boolean;
begin
  Result := Values.Contains(N);
end;

Эта реализация проще и легче поддерживать, чем оригинальная версия на ассемблере. Однако она может не быть столь эффективной для очень больших массивов или конкретных случаев использования, где производительность критична.

В статье описана функция в программном языке Delphi, которая проверяет наличие заданного числа N в массиве Values и возвращает результат в виде булевого значения.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Массивы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-07-01 23:30:10/0.0036449432373047/0