![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ламерский вопрос - рендом из определенного диапазона
WebSQLNeederr © (2007-12-23 13:22:00)Функция random выдает случайное число от НУЛЯ до параметра функции. А как сделать что бы случайное число выводилось из диапазона предварительно заданных згачений, например random(1,3,5,8,15,18,33)
Потом когда мне нужно я мог бы удалить из варианта число 18 и тогда рендом должен был бы выводиться из такого диапазона random(1,3,5,8,15,18,33)
Как это сделать?
WebSqlNeederr (2007-12-25 00:27:00) [1]Плохиш, спасибо.
Плохиш (2007-12-24 18:02:00) [2]
> WebSqlNeederr (24.12.07 17:53) [15]
Используй TList.
random(TList.Count)
TList.Delete
WebSqlNeederr (2007-12-24 17:53:00) [3]Я просто не совсем соображаю как его использовать.
например у меня есть Стрингрид из 8 строчек в которой хранятся данные.
Моей програмой нужно взять из случайной строки стрингрида значение, НО если же другая строка из стрингрида=определенному значению то из этой строки больше не нужно рендомом брать значения НИКОГДА.
Соответственно на первом этапе как советует Плохиш мы создаем массив
var arr:array of integer;
...
SetLength(arr,7);
arr[0]:=1;arr[1]:=2;arr[2]:=3;arr[3]:=4;arr[4]:=5;arr[5]:=6;arr[6]:=7;arr[7]:=8;
То есть например arr[0]:=1 показывает на первую строку стрингрида (нулевая это заголовки, названия).
Теперь мы делаем i:=random(7); скажем рендом стал 4, теперь мы будем брать значения из arr[i] то есть из 5 строки стрингрида.
И вот теперь нужно запретить брать значения из 6 строки. Что то я запутался как это через массив? Заново пересоздавать массив? То есть:
SetLength(arr,6);
arr[0]:=1;arr[1]:=2;arr[2]:=3;arr[3]:=4;arr[4]:=5;arr[5]:=7;arr[6]:=8;
Так?
Kolan (2007-12-24 17:31:00) [4]> А есть ли еще какой то способ кроме как советовал Плохиш
Самый нормальный способ.
Palladin (2007-12-24 17:30:00) [5]Ну [4] например, а чем тебя Плохиш, то не устроил? Религиозные убеждения?
WebSqlNeederr (2007-12-24 17:21:00) [6]Попрошу без флуда.
А есть ли еще какой то способ кроме как советовал Плохиш © (23.12.07 13:30) [1] ?
@!!ex (2007-12-24 10:57:00) [7]> [6] студент (23.12.07 18:29)
Вообще не в тему... сабж читали? Кроме названия, есть еще и описание..
Palladin (2007-12-24 10:43:00) [8]
> [6] студент (23.12.07 18:29)
и что значит столь глупокофилосовский совет?
Леон (2007-12-24 09:20:00) [9]
> А что самое прикольное есть вероятность что не дасться никогда
> :)
за достаточно большой промежуток времени - дасться (вероятность то хоть и мала, но отлична от нуля)
Kolan (2007-12-23 22:35:00) [10]> C чего это?
С того что нет 100 вероятности, что из 1 000 000 рэнжм сгенерит один из 6 сабжевых номеров.
@!!ex (2007-12-23 19:00:00) [11]> [5] Kolan © (23.12.07 17:25)
C чего это?
студент (2007-12-23 18:29:00) [12]randomRange
Kolan (2007-12-23 17:25:00) [13]>
> Это создаст иллюзию того, что выбор компьютеру дается нелегко
А что самое прикольное есть вероятность что не дасться никогда :)
DrPass (2007-12-23 17:05:00) [14]
> а можно ещё так )))
>
> repeat
> n:=random(34)
> until (n=1) or (n=3) or (n=5) or (n=8) or (n=15) or (n=18)
> or (n=33);
Лучше так:
repeat
n:=random(1000000)
until (n=1) or (n=3) or (n=5) or (n=8) or (n=15) or (n=18) or (n=33);
Это создаст иллюзию того, что выбор компьютеру дается нелегко
Blind Guardian (2007-12-23 13:51:00) [15]Новый Год скоро! давайте смеяться вместе... (ладно, удаляйте эти бессмысленные посты =) )
Blind Guardian (2007-12-23 13:50:00) [16]а можно ещё так )))
repeat
n:=random(34)
until (n=1) or (n=3) or (n=5) or (n=8) or (n=15) or (n=18) or (n=33);
)))
Плохиш (2007-12-23 13:30:00) [17]Занеси числа в массив и с помощью рандом получай случайный индекс массива.