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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.10.2013, 13:50   #1
FleXik
Форумчанин
 
Регистрация: 01.11.2012
Сообщений: 770
Вопрос Как в RandomRange блокировать определенные числа?

Как в RandomRange блокировать определенные числа? К примеру число 53, как это сделать? Спасибо.
FleXik вне форума Ответить с цитированием
Старый 02.10.2013, 14:04   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,572
По умолчанию

Проверять, если одно из таких чисел, то повторять рандом.
Arigato вне форума Ответить с цитированием
Старый 02.10.2013, 14:14   #3
FleXik
Форумчанин
 
Регистрация: 01.11.2012
Сообщений: 770
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
Проверять, если одно из таких чисел, то повторять рандом.
да это понятно... я это и сам могу сделать, а что если опять эта цифра попадет? :D мне нужно как-то ее изьять
FleXik вне форума Ответить с цитированием
Старый 02.10.2013, 14:31   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от FleXik Посмотреть сообщение
да это понятно... я это и сам могу сделать, а что если опять эта цифра попадет? :D мне нужно как-то ее изьять
Во-первых, не "цифра", а "число".

А во-вторых, ну выпадёт ещё раз, ещё раз генерите ПСЧ. до тех пор, пока не выпадет другое.

общая логика такая (если, например, не нужны числа 53, 35 и 99 ):
Код:
 Randomize;
....

  repeat
     r := RandomRage(x, y);
  until  (r<>53) and (r<>35) and (r<>99);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.10.2013, 14:34   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А если допустимых значений не очень много, то держать их в массиве и рандомно индекс массива генерировать.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.10.2013, 17:56   #6
FleXik
Форумчанин
 
Регистрация: 01.11.2012
Сообщений: 770
По умолчанию

всем спасибо, буду пробовать
FleXik вне форума Ответить с цитированием
Старый 02.10.2013, 21:41   #7
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Иногда, понта ради, я пользуюсь хаками (для себя, не в продакшене, конечно). Сей случай хорошая возможность продемонстрировать это
предположим надо сгенерировать число от 1 до 100, за исключением 53, 35 и 99:
Код:
Result := Random(100-1-3) + 1; // числа 1 и 100 - здесь диапазон генерации
For i := 1 to 3 do // 3 тут и на пред. строке - кол-во исключаемых эл-тов
Inc(Result, Ord(Result >= Ord(#35#53#99[i]))); // сама магия, числа для исключения через # по возрастающей
Ну а сам пример - небольшая математическая уловка.
Хак со строкой можно делать даже для чисел больше 255, вообще он предназначен для определения некоего произвольного набора чисел, сразу в коде, без декларации, некоторое время назад придумал сам, но пока пользовал просто в экспериментальных вещах, ну а орд от булеана довольно известный, пользую нередко

Последний раз редактировалось phomm; 02.10.2013 в 21:52.
phomm вне форума Ответить с цитированием
Старый 03.10.2013, 16:00   #8
FleXik
Форумчанин
 
Регистрация: 01.11.2012
Сообщений: 770
По умолчанию

phomm, благодарю за помощь но причем тут 1 и 3 в первой и второй строках я так и не понял
FleXik вне форума Ответить с цитированием
Старый 03.10.2013, 16:32   #9
FleXik
Форумчанин
 
Регистрация: 01.11.2012
Сообщений: 770
По умолчанию

Serge_Bliznykov, спасибо огромнейшее!! Ваш вариант подошел идеально, и просто и быстро. У меня еще один вопрос, я заметил что если мне нужно случайное число от 1 до 100 то в RandomRange надо указывать от 0 до 101, иначе показывает от 2 до 99, или я не прав?
FleXik вне форума Ответить с цитированием
Старый 03.10.2013, 16:57   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

RandomRange(1,101)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как работает RandomRange? bakanaev Общие вопросы Delphi 3 12.03.2013 17:10
[Delphi]Удалить в файле целых чисел определенные числа.(работает некорректно) neytron007 Помощь студентам 7 06.01.2013 18:40
Как блокировать разрушение фрейма? zatocnik JavaScript, Ajax 0 03.11.2012 01:19
найти определенные числа в строке fize Помощь студентам 3 15.01.2010 11:26
Как блокировать рекламу плагами FFox'a AgressiveBehavior Свободное общение 1 23.09.2009 14:14