|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
25.01.2012, 15:19 | #1 |
Пользователь
Регистрация: 12.11.2010
Сообщений: 83
|
Генератор случайно выборки из массива
Добрый день!
Суть программы следующая, есть массив, необходимо из этого массива выбрать случайным образом определенное пользователем количество данных. Например: пользователь выбирает массив состоящий из значений от 1 до N (допустим 15), потом заполняется массив этими значениями, потом пользователь выбирает сколько случайным образом значений необходимо выбрать из этого массива (допустим 5), далее генерируются 5 значений из 15 случайным образом и выводятся в столбик. Вопрос как сделать так, чтобы эти 5 случайным образом значений не повторялись? Вот код программы которую я написал, все работает ок!, только едиственная проблема не могу сделать так, чтобы значения из массива не повторялись. Код:
___________ Код нужно оформлять по правилам: тегом [CODE]..[/СODE] (это кнопочка с решёточкой #) Не забывайте об этом! Модератор. Последний раз редактировалось Serge_Bliznykov; 25.01.2012 в 15:53. |
25.01.2012, 16:00 | #2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
загоняйте нужные значения клиентов в массив, его перемешивайте случайныйм образом, а потом берите подряд столько значений, сколько Вам надо. т.к. изначально повторов не было, то их не будет и в перемешанном массиве.
p.s. алгоритм перемешивания смотрите на форуме... |
25.01.2012, 16:03 | #3 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
например так:
Код:
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
27.01.2012, 08:09 | #4 |
Пользователь
Регистрация: 12.11.2010
Сообщений: 83
|
Спасибо!
Если может объясните смысл Do a = Int(Rnd * Kolvo) + 1 Loop Until InStr(s, "<" & a & ">") = 0 Точнее интересует InStr(s, "<" & a & ">") = 0 Заранее благодарен. |
27.01.2012, 11:16 | #5 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
я забранные номера элементов массива записываю в строку s = s & "<" & a & ">".
InStr(s, "<" & a & ">") = 0 - значит а нет в строке. обрамляющие знаки (я взял <>) нужны для того чтобы корректно осуществить поиск. нельзя записать просто числа, потому что если потом искать "1" то единичка будет найдена в числах от 10 до 19. а если искать "<1>" то в строке "<10>" совпадений нет.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
27.01.2012, 11:45 | #6 |
Пользователь
Регистрация: 12.11.2010
Сообщений: 83
|
Нихрена не понял, но все равно спасибо!
|
27.01.2012, 12:03 | #7 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
))
ладно. 1. генерируем случайное число а (например, получилось 12) 2. проверяем если ли в строке s такая последовательность симолов "<12>" 3. если нет забирем 12 элемент массива и в сроку s добавляем запись "<12>", что значит 12-й уже забран. 4. выполняем п.1 строка s последовательно заполняется значениями уже выпавших номеров <> - здесь это не меньше, больше - это кавычки, которыми обрамлено число. вместо них можно использовать любые другие, даже не обязательно разные.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
27.01.2012, 14:18 | #8 |
Пользователь
Регистрация: 12.11.2010
Сообщений: 83
|
Код:
[CODE]Randomize s="" For j = 1 To MKolvo Do a = Int(Rnd * Kolvo) + 1 Loop Until InStr(s, "<" & a & ">") = 0 .Offset(j, 0) = a s = s & "<" & a & ">" Next[CODE] Последний раз редактировалось Palomnik1096; 27.01.2012 в 14:22. |
27.01.2012, 14:45 | #9 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
да, похоже.
только этот алгоритм при MKolvo > 60 просто рухнет из-за переполнения длины строки s. на коллекциях все будет работать без ограничений и очень-очень быстро. Код:
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
27.01.2012, 14:53 | #10 |
Пользователь
Регистрация: 12.11.2010
Сообщений: 83
|
Да вроде все работает и с предыдущим кодом, пробывал Kolvo =500, МKolvo =150, все работает, ничего не рушится
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как востановить случайно удалённый обьект в с++ билдере | sigmanen | C++ Builder | 1 | 06.12.2010 20:39 |
случайно удалил программу | voldemen | Компьютерное железо | 8 | 29.09.2010 15:32 |
Генератор случайных чисел для массива! | Tetramorf | Общие вопросы C/C++ | 8 | 11.03.2010 13:51 |
случайно число (rand) | Abuhamed | PHP | 4 | 20.02.2010 13:05 |
Случайно но не повторяясь! | uraura | Общие вопросы Delphi | 8 | 30.11.2008 19:46 |