|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#18+
смотрите есть запрос на генерацию случайных чисел в определенное поле Sub Macro1() [Visual Basic] Dim LRandomNumber As Integer Dim s$ Randomize LRandomNumber = Int((300 - 200 + 1) * Rnd() + 200) s = "UPDATE вычисляемые SET [пук]=" & LRandomNumber & " WHERE [крак]>=0" CurrentDb.Execute s End Sub [Visual Basic/] но проблема в том что , это генерирует на все поле,покажите как правильно написать цикл "While not" ,чтобы он не трогал уже заполненные ячейки? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2017, 12:35 |
|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#18+
я ,языка не знаю,это собрано по гуглу было... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2017, 12:39 |
|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#18+
95bugimen, Вы бы изложили изначальную задачу, без своего видения, типа - как сесть на стул из которого торчит гвоздь? А то у вас получилось что-то типа - сгибаю ноги в коленях - в пятую точку нечто колет... куча вопросов: - случайные числа какие и в каком диапазоне? - должны повторяться или нет? - .... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2017, 13:02 |
|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#18+
vmag,там функция для случайных чисел и диапазон уже есть "Int((300 - 200 + 1) * Rnd() + 200)",нужно чтобы был запрос для каждой ячейки определенного поля создавал случайные числа,но для каждой ячейки это число должно быть свое, у меня в программе,он генерирует числа ,но для всего поля,т.е. чтобы в поле все числа были разные . [img=поле.png] ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2017, 13:14 |
|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#18+
диапазон понятен из формулы - от 200 до 300. Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2017, 13:14 |
|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#18+
95bugimen, а объяснять без картинок, словами, плохо получается?))) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2017, 13:16 |
|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#18+
хм-м-м, ну вон человек не понял,попросил разьяснить ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2017, 13:25 |
|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#18+
95bugimen, Ну, как я понял (совместными усилиями): - диапазон от 200 до 300 (мне просто показалось, что это пример из гугла без изменений) - соответственно всего будет максимум записей в таблице 101 (если 200 и 300 входят в диапазон, повторений не должно быть и на выходе рандомизатора целые числа 200, 201, 202, ... 300) - таблица на максимум 101 запись уже заполнена, нужно только прописать поля рандомизатором. ИМХО задачу можно с вести к алгоритму перемешивания колоды карт: 1. Делаем массив (m) integer, грубо от 200 до 300, обнуляем. 2. Цикл по записям. 3. Вычисляем случайное число от 200 до 300 - (i) - если в массиве m (i) стоит ноль, пишем в m (i) единицу, а в запись пишем i и уходим на пункт 2, берем следующую запись. - если в массиве m (i) уже стоит один (выбрано ранее), берем следующий элемент массива, в котором стоит ноль, если уперлись в конец массива, ищем в массиве m(i) = 0 с начала. Соответственно по очередному m(i) <> 0 пишем в m (i) единицу, а в запись пишем i и уходим на пункт 2, берем следующую запись. Итого в конце все m(i) = 1, а записи заполнены без повторений рандомизатора. Мдя... чтобы ответить - тз, придется придумывать самому... не так придумал, не так ответил, соответственно... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2017, 14:00 |
|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#18+
vmag,ахха а до меня долшо,все куда проще [пук] is null ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2017, 14:06 |
|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#18+
95bugimenvmag,ахха а до меня долшо,все куда проще [пук] is null ага... первое число будет например 210 все пуки null, всем пропишется один раз 210 и пуков с null имхо больше не будет... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2017, 14:14 |
|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#18+
95bugimenvmag,ахха а до меня долшо,все куда проще [пук] is nullсомневаюсь я, однако.))) и в том, что дошло. и в том, что это правильное решение. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2017, 14:18 |
|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#18+
95bugimen, тут слабое место - отсутствие повторений рандомизатора, а это значит, что каждый раз нужно проверять выпадало ранее число или нет... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2017, 14:18 |
|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#18+
А что, если каким-либо образом заполнить случайными числами (неважно из какого диапазона) вспомогательное поле, затем отсортировать по этому полю, затем пронумеровать записи по порядку от 200 до 300? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2017, 16:01 |
|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#18+
ИВП., тоже вариант, только задача на счет отсутствия повторов случайных чисел не снимается, а так - вполне, и диапазон здесь как раз архи важен, например вероятность повтора выпадения одинаковых чисел из диапазона 0 - 1 000 000 000 000, теоретически меньше чем из диапазона 200 - 300. а проверку на дубли можно один раз сделать в конце и если повторения есть - повторить тупо заполнение с самого начала ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2017, 16:29 |
|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#18+
ИВП.А что, если каким-либо образом заполнить случайными числами (неважно из какого диапазона) вспомогательное поле, затем отсортировать по этому полю, затем пронумеровать записи по порядку от 200 до 300? не..... все супер, никаких проверок не нужно, и даже если повторы будут - не страшно, нумерация всё зашлифует как нужно... молодца! ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2017, 16:49 |
|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#18+
ИВП.А что, если каким-либо образом заполнить случайными числами (неважно из какого диапазона) вспомогательное поле, затем отсортировать по этому полю, затем пронумеровать записи по порядку от 200 до 300?Но с таким же успехом можно было сразу просто пронумеровать. Или нет? Можете объяснить разницу? Я, честно, смысла не особо вижу. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2017, 17:43 |
|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#18+
хм-м-мМожете объяснить разницу? одно дело просто перенумеровать... другое дело перемешать, потом пронумеровать... Например есть 36 шаров (от 1 до 36) Нужно написать эмулятор игры 5 из 36 на 10 тиражей при котором 10 раз будут выбираться 5 случайных чисел... Самый простой вариант - перемешать и взять первые пять по списку... Если не перемешивать, то 10 раз будут шары 1, 2, 3, 4, 5... В общем, если операция одноразовая - то как не парадоксально - ваш вариант - тупо пронумеровать самый оптимальный. Но если многоразовая, то не покатит... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2017, 17:51 |
|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#18+
vmagхм-м-мМожете объяснить разницу? одно дело просто перенумеровать... другое дело перемешать, потом пронумеровать...Да это-то мне с самого начала ясно. Дает ли это перемешивание какую-либо пользу в свете задачи ТС? vmagкак не парадоксально - ваш вариант - тупо пронумеровать самый оптимальныйВ некотором смысле да. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2017, 18:02 |
|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#18+
хм-м-мВ некотором смысле да.Сейчас попробую придумать получше, строго по условию задачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2017, 18:06 |
|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#18+
Вот, готово, только имена таблицы и полей другие: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2017, 18:33 |
|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#18+
__MichelleВот, готово Супер, будет работать - однозначно! Самое интересное, что давным давно именно этот алгоритм мне и пришлось усовершенствовать... даже премию дали... Если элементов для перемешки много, то выборка элементов идет не линейно по времени и оно заметно не постоянно, первые выбираются мгновенно, а ближе к концу рандомизатор всё чаще начинает долбиться в B(LRandomNumber) = False, которые уже выбраны, и когда например осталось выбрать последние из 1000 (типа 131, 7, 967), а в эти лунки снаряд ну никак не хочет попадать - создается ощущение, что задача вообще зависла... Перемешка может идти и минуту и пять и десять, все зависит от количества элементов и быстродействия эвм. Суть рац предложения как раз и была в том, что для выбора одного случайного элемента рандомизатор используется только один раз (если выборка в этом месте случилась ранее, то берется первое не выбранное место правее, а при достижении конца выборки, продолжаем искать не выбранный левее от места попадания) Но ваш вариант точно рабочий, причем все задержки можно выдать не посвященным за качественное перемешивание покатит... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2017, 19:41 |
|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#18+
vmagПеремешка может идти и минуту и пять и десять, все зависит от количества элементов и быстродействия эвм.Проверила. На 1000 записей, во всех записях поле для заполнения пустое. Получилось 3,53125 сек . Характеристики компьютера (далеко не супер): Процессор x86 Family 6 Model 15 Stepping 13 GenuineIntel ~1799 МГцВсего виртуальной памяти 2.00 ГБДоступно виртуальной памяти 1.96 ГБФайл подкачки 3.81 ГБ ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2017, 20:26 |
|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#18+
__Michelleво всех записях поле для заполнения пустое да - в вашем алгоритме это важно, иначе при таком условии Код: vbnet 1.
перемешки вообще не будет... Меня интересует другое: поставьте после строки Код: vbnet 1.
счетчик (думаю лонга хватит) и скажите (если не трудно) его значение в конце заполнения - это количество включения рандомизатора для перемешки 1000 элементов, если мне не изменяет память до для перемешки 10-20 элементов рандомизатор используется около сотни раз... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2017, 20:47 |
|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#18+
vmag, Хорошо. Сделаю. Но немного позже. Сейчас меня к компьютеру не пускают.))) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2017, 20:52 |
|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#18+
95bugimen, Как я понял , задача стоит в случайной выборке нескольких несовпадающих значений из множества? Есть готовые алгоритмы . Вот один их них http://www.planetaexcel.ru/techniques/2/94/ (способ 3) . Можно адаптировать его к вашей задаче. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2017, 23:02 |
|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#18+
vmag, Результаты на 1000 записей (без индекса по id / с индексом по id) ВремяЧисло проходов3.640625 сек. 5978 3.59375 сек. 5634 3.59375 сек. 5860 3.59375 сек. 6410 3.625 сек. 6559 ВремяЧисло проходов2.734375 сек. 5384 2.75 сек. 7444 2.734375 сек. 7679 2.75 сек. 5967 2.734375 сек. 7419 Результаты на 2000 записей (без индекса по id / с индексом по id) ВремяЧисло проходов9.9375 сек. 13573 9.90625 сек. 14581 9.90625 сек. 12211 9.9375 сек. 16050 10.04688 сек. 14541ВремяЧисло проходов6.828125 сек. 16943 6.828125 сек. 18580 6.8125 сек. 13532 6.8125 сек. 15823 6.828125 сек. 13562 Результаты на 4000 записей (без индекса по id / с индексом по id) ВремяЧисло проходов31.04688 сек. 31796 31.0625 сек. 31419 31.07813 сек. 34280 31.0625 сек. 26918 31.09375 сек. 29804ВремяЧисло проходов18.71875 сек. 28419 18.75 сек. 29377 18.71875 сек. 27442 18.71875 сек. 32767 18.71875 сек. 33095 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2017, 23:04 |
|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#18+
guest_rusimport, Игра в наперстки... ну тоже оригинальный вариант... Кручу, верчу, запутать хочу... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2017, 23:16 |
|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#18+
vmag__Michelleво всех записях поле для заполнения пустое да - в вашем алгоритме это важно, иначе при таком условии Код: vbnet 1.
перемешки вообще не будет... Нет, я подчеркиваю это потому, что, чем больше полей из подлежащих заполнению являются пустыми, тем дольше продлится обработка, то есть объясняю, в каких условиях получены временные оценки. А условие Код: sql 1.
введено затем, чтобы ни одно из этих полей не осталось незаполненным, но и процесс бы не крутился сверх необходимого. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2017, 23:18 |
|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#18+
__Michelle, Спасибо, вполне нормальные и ожидаемые результаты для современных эвм... Я премию получил за реализацию на ibm-286, там были другие временные характеристики... В общем для ТС а имхо уже достаточно всего, если студент, то может уже кандидатскую писать... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2017, 23:22 |
|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#18+
vmag....если студент, то может уже кандидатскую писать...А если школьник, то докторскую. А если в саду, то в РАН баллотироваться. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2017, 23:28 |
|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#18+
__Michelle, ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2017, 23:32 |
|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#18+
Честно говоря, я так и не понял, зачем нужны циклы, если в постановке задачи нет четкого требования, что значения не могут повторяться (или я пропустил?). Просто делаем один update , прописывая случайное значение из функции в строки с пустым пук: Код: sql 1.
А сама функция: Код: vbnet 1. 2. 3.
Важно наличие аргумента, который меняется для каждой строки (Dummy), тогда запрос будет вызывать функцию для каждой строки, а не использовать кэшированное значение. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2017, 06:11 |
|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#18+
MrShinв постановке задачи нет четкого требования, что значения не могут повторяться (или я пропустил?). 95bugimenнужно чтобы был запрос для каждой ячейки определенного поля создавал случайные числа,но для каждой ячейки это число должно быть свое 95bugimenт.е. чтобы в поле все числа были разные см. пост с картинкой ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2017, 08:46 |
|
|
start [/forum/topic.php?all=1&fid=45&tid=1612621]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
98ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 203ms |
0 / 0 |