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

Вниз

Random()   Найти похожие ветки 

 
Neiroman ©   (2006-04-11 08:58) [0]

Подскажите, пожалуйста, можно ли как-нибудь избежать повторы при использовании Random()? Или как обработать повтор? Пишу тест со случайной загрузкой вопросов, повторы надоели, некотрые вопросы вообще не используются!. Заранее спасибо.


 
Сергей М. ©   (2006-04-11 09:07) [1]


> можно ли как-нибудь избежать повторы при использовании Random()?


Нельзя.

Но можно подойти к использованию Random() с другой стороны :

var
 Questions: TStrings;
 i: Integer;
..

 while Questions.Count > 0 do
   begin
      i := Random(Questions.Count);
      ShowMessage(Questions[i]);
      Questions.Delete(i);
   end;


 
tesseract ©   (2006-04-11 09:42) [2]

А что ты хочешь random имеет равномерно распределение.
можешь запоминать номера уже показанных вопросов и запускать генератор заново если повтор.


 
vovnuke ©   (2006-04-11 09:52) [3]

та перед Random() вызываешь Randomize?


 
Neiroman ©   (2006-04-12 02:23) [4]

Randomize вызываю. Все равно повторы. Путем запоминания добился только того, что повтор идет не сразу, а через несколько раз. Все равно всем спасибо! Может есть еще способы, кроме  Random()?


 
Германн ©   (2006-04-12 02:35) [5]


>  Может есть еще способы, кроме  Random()?

Нет таких способов.
Ты можешь стать первым, кто их создаст! Дерзай, если хочешь!


 
balepa ©   (2006-04-12 08:50) [6]

Че то не понял надо что бы было так:
первый раз:
1
5
6
8
9

второй:
5
6
1
9
8
и т.д.

или так:
первый раз:
1
5
6
7
3

второй:
2
8
9
4
10

и т. д.
????????????


 
Старик   (2006-04-12 08:59) [7]

Насколько я понял, требуется, чтобы в серии сгенерированных чисел не было одинаковых.
Я могу предложить два способа:
1. Нехитрые манипуляции с результатом Random"a и секундами (поделить его на секунду и округлить и т.д.). Способ, конечно, геморный, да и от повторов не спасает, а только снижает их вероятность. Но тем не менее.
2. Раз это тест, то ты, зная сколько у тебя будет задано вопросов, перед началом теста просто сделай так: заведи динамический массив чисел типа Integer. Как только тебе становится известно, сколько у тебя будет вопросов, определяешь длину этого массива. И тут же вызываешь функцию заполнения его случайными числами и при этом проверяешь, нет ли повторов. Если есть - генерируем еще раз. И т.д., пока не заполнишь весь массив. Я примерно так делал, когда корабли в морском бою расставлял :)


 
balepa ©   (2006-04-12 09:47) [8]


> Старик   (12.04.06 08:59) [7]

А я когда первые свои "Пятнашки" делал :)


 
wal ©   (2006-04-12 10:42) [9]


> [7] Старик   (12.04.06 08:59)
> Если есть - генерируем еще раз.
Существует маааленькая вероятность не закончить в приемлемое время.
Предлагаю такой вариант:
Создаем массив A со значениями 1-N (или любыми нужными),
создаем массив B с рандомными значениями.
Массив B сортируем любым способом, но вместе с перестановками в массиве B делаем аналогичные перестановки в массиве A. В итоге имеем в A неповторяющиеси значения в произвольном порядке.

С уважением.

ЗЫ. Таким образом можно сформировать СЧ с любой (дискретной) функцией распределения.


 
Palladin ©   (2006-04-12 14:35) [10]


> wal ©

и чем это принципиально отличается от [1] кроме ненужных телодвижений со вторым массивом?


 
wal ©   (2006-04-12 14:50) [11]


> [10] Palladin ©   (12.04.06 14:35)
Принципиально ничем, кроме ненужных телодвижений с динамическими структурами ;)


 
Desdechado ©   (2006-04-12 15:30) [12]

чем больше вопросов, тем меньше шансов повторения



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

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

Наверх




Память: 0.49 MB
Время: 0.042 c
1-1143116937
Frosty
2006-03-23 15:28
2006.04.30
Двумерные массивы строк в качестве параметров процедур и функций


1-1143001881
Старик
2006-03-22 07:31
2006.04.30
DLL. Ошибка при использовании типа string в ее функциях


15-1144740747
syte_ser78
2006-04-11 11:32
2006.04.30
Вопрос по РНР


2-1144922008
Роман87
2006-04-13 13:53
2006.04.30
"swf" файлы


6-1137144088
Maestro
2006-01-13 12:21
2006.04.30
LAN и FTP, Зависание Socket