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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2012, 08:21   #1
bakanaev
Форумчанин
 
Регистрация: 27.03.2012
Сообщений: 438
По умолчанию как сравнить переменную с набором чисел?

Как сравнить переменную с набором чисел?
Данная переменная i ( само собой ее значение может меняться) и набор чисел
PHP код:
1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36 

Можно ли переменную i сравнить сразу со всем набором, т.е i есть в этом наборе то выводим слово "Есть" если нету то "Нет"? Или придется писать для каждого числа конструкцию if then else ?
bakanaev вне форума Ответить с цитированием
Старый 19.06.2012, 08:28   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

набор чисел каким образом задан?
Если это массив - тогда нужно писать цикл c проверкой значений:
Код:
var isFound : boolean;
...
begin
...

  isFound := false;
  for i:=Low(Massiv) to High(Massiv) do
    if Massiv[i]= Искомая_величина then begin\
       isFound := true;
       Break;
    end;

  if isFound then ShowMessage('Искомое найдено')
  else ShowMessage('Нет такого! Давай, до свидания!');
если же это коллекция (наследник от TList), то там есть методы поиска (ну, что-то вроде Список.IndexOf(Искомая_величина)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.06.2012, 08:48   #3
bakanaev
Форумчанин
 
Регистрация: 27.03.2012
Сообщений: 438
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
набор чисел каким образом задан?
Если это массив - тогда нужно писать цикл c проверкой значений:
Код:
var isFound : boolean;
...
begin
...

  isFound := false;
  for i:=Low(Massiv) to High(Massiv) do
    if Massiv[i]= Искомая_величина then begin\
       isFound := true;
       Break;
    end;

  if isFound then ShowMessage('Искомое найдено')
  else ShowMessage('Нет такого! Давай, до свидания!');
если же это коллекция (наследник от TList), то там есть методы поиска (ну, что-то вроде Список.IndexOf(Искомая_величина)
Спасибо, получилось! (Плюсонул Вам)
bakanaev вне форума Ответить с цитированием
Старый 19.06.2012, 09:34   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

если набор чисел статичный то можно через множество.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.06.2012, 10:40   #5
ych_del
Форумчанин
 
Аватар для ych_del
 
Регистрация: 06.02.2011
Сообщений: 149
По умолчанию

Код:
if X in [1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36] then ...
Профессиональный конвертор галлюцинаций заказчика в алгоритмическую структуру.
ych_del вне форума Ответить с цитированием
Старый 19.06.2012, 10:53   #6
bakanaev
Форумчанин
 
Регистрация: 27.03.2012
Сообщений: 438
По умолчанию

Цитата:
Сообщение от ych_del Посмотреть сообщение
Код:
if X in [1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36] then ...
Самый оптимальный вариант для меня))!!
bakanaev вне форума Ответить с цитированием
Старый 19.06.2012, 10:53   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Пепел Феникса, ych_del, к сожалению, решение через множество очень сильно ограничено диапазоном возможных чисел.
если вдруг среди этих чисел будут отрицательные величины, или значение любого из чисел превышает 255, то решение через множество будет невозможно.

а если диапазон значений позволяет, то такое решение вполне себе красивое, наглядное и эффективное!


Цитата:
Сообщение от bakanaev
Самый оптимальный вариант для меня))!!

Если подходит - то пользуйтесь. Решение отличное!
извините, что я запамятовал и сразу не предложил такой вариант...


p.s.
Цитата:
Сообщение от Пепел Феникса
если набор чисел статичный то можно через множество.
на самом деле - это как раз не обязательно. Множество можно и "на лету" формировать...

Последний раз редактировалось Serge_Bliznykov; 19.06.2012 в 10:57.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.06.2012, 18:27   #8
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,883
По умолчанию

Можно посмотреть в сторону Tbits - любой набор чисел можно реализовать, хоть отрицательные, хоть больше 255, и конечно тбитсы можно создавать динамически, чтобы не валить это в виде массивов-констант в коде, плюс в наследнике можно создать метод, принимающий открытый массив чисел и величину, сам объект проверяет попадание величины в массив, и в итоге, клиентский код будет выглядеть почти так же, как с множеством, а мощщи у такого метода в разы больше, чем у множества.

Есть только один минус - сложновато написать будет для новичка )
phomm вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В переменную последовательно вводятся числа. Окончание ввода либо по желанию пользователя, либо когда сумма отрицательных чисел VladGorin Помощь студентам 0 11.05.2012 16:49
как сравнить 4 числа,наименьшее записать в R15.как вычислить степень? dezder Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 18.12.2011 13:02
Как создать файл с набором записей? Alexsey1991 Помощь студентам 4 18.12.2009 07:31
Как записывать и считывать Ini File с набором строк (#10#13) в одном параметре?) SkAndrew Общие вопросы Delphi 4 15.11.2008 00:02