Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.04.20;
Скачать: CL | DM;

Вниз

Помогите понять почему Random работает всегда постоянно одинаков?   Найти похожие ветки 

 
webSQLNeederr   (2008-03-24 12:33) [0]

Есть код:
for i:=0 to str.Count-1 do
begin
   str.Exchange(i,Random(str.Count-1));
end;

Оно да, перемешивает текст. НО если я опять запускаю програму то оно перемешивает текст ТАКЖЕ то есть ИДЕНТИЧНО как и предыдущий текст.

Я в ступоре!! Не могу понять почему? Не может ведь быть что бы все 1000 строк, которые я перемешивал при повторном вызове Рендома (притом повторный вызов не в этой же программе а при новой компиляции или запуска) то Рендом чисто "случайно" выдавал одни и те же значения ???

Я специально проверил все 1000 строк ТАКЖЕ перемешались как и при предыдущем запуске.

В чем дело ???


 
Сергей М. ©   (2008-03-24 12:38) [1]


> В чем дело ?


В невызове процедуры Randomize перед первым использованием Random


 
webSQLNeederr   (2008-03-24 12:42) [2]

да? А как? Пример можно?


 
Семеныч   (2008-03-24 12:43) [3]

> webSQLNeederr

To initialize the random number generator, add a single call Randomize or assign a value to the RandSeed variable before making any calls to Random.

На чтение 10 строчек справки по Random времени ушло бы гораздо меньше, чем на проверку перемешивания 1000 строк, честное слово.


 
webSQLNeederr   (2008-03-24 12:46) [4]

Спасибо! работает!


 
webSQLNeederr   (2008-03-24 12:51) [5]


> To initialize the random number generator, add a single
> call Randomize or assign a value to the RandSeed variable
> before making any calls to Random.

Еще такой момен остался не ясным. Вызывать эту функцию нужно раз на программу или же каждый раз в новой функции? Или же можно кинуть в оброботчик события FormCreate?


 
{RASkov} ©   (2008-03-24 13:05) [6]

> [5] webSQLNeederr   (24.03.08 12:51)

Достаточно одного раза в любом месте.... как вариант в файле проекта (*.dpr)


 
Amoeba ©   (2008-03-24 13:07) [7]


> webSQLNeederr   (24.03.08 12:51) [5]
>
>
> > To initialize the random number generator, add a single
> > call Randomize or assign a value to the RandSeed variable
> > before making any calls to Random.
>
> Еще такой момен остался не ясным. Вызывать эту функцию нужно
> раз на программу или же каждый раз в новой функции? Или
> же можно кинуть в оброботчик события FormCreate?
>

Вызывать столько раз, сколько делается перемешивание. Если перемешивание однократное, то вызывай Randomize там, где удобнее.


 
korneley ©   (2008-03-24 13:11) [8]


> Вызывать столько раз, сколько делается
> перемешивание
Нафига? "add a single call Randomize " [5] - правильно


 
korneley ©   (2008-03-24 13:12) [9]

Упс... [6] конечно же :)


 
Семеныч   (2008-03-24 13:15) [10]

> Amoeba ©   (24.03.08 13:07) [7]
> Вызывать столько раз, сколько делается перемешивание.

Зачем?

> webSQLNeederr

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

Randomize, в свою очередь, приваивает переменной RandSeed тоже случайное значение. Поэтому для получения "случайной последовательности случайных" чисел достаточно один раз вызвать Randomize, а потом можно сколько угодно раз вызывать Random.



Страницы: 1 вся ветка

Текущий архив: 2008.04.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.018 c
15-1204806848
vajo
2008-03-06 15:34
2008.04.20
Кто-нибудь пользовался Nokia 6120?


3-1194961339
Kolan
2007-11-13 16:42
2008.04.20
Как узнать SQL запрос возвращает результат или нет?


2-1206468305
Blind Guardian
2008-03-25 21:05
2008.04.20
Вопрос про отладку в Delphi 7


2-1206307378
batya-x
2008-03-24 00:22
2008.04.20
TrackBar и OnClick


15-1204718166
pasha_golub
2008-03-05 14:56
2008.04.20
Алгоритмы компановки (расстановки, layout) графов