Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.04.30;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.01 c
15-1144329389
DON
2006-04-06 17:16
2006.04.30
WinXP


15-1144336497
Nic
2006-04-06 19:14
2006.04.30
Расскажите о Ваших трудовых подвигах


1-1143469728
AlexF
2006-03-27 18:28
2006.04.30
Многострочное название node


3-1141649889
ZZZ111
2006-03-06 15:58
2006.04.30
Конвертор Excel - DBase


15-1144345143
Vendict
2006-04-06 21:39
2006.04.30
Win2kSp4->Win2kSp6





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский