|
генерация случайного числа для каждой ячейки
|
|||
---|---|---|---|
#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 |
|
|
start [/forum/topic.php?fid=45&msg=39422428&tid=1612621]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
144ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 252ms |
0 / 0 |