powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / генерация случайного числа для каждой ячейки
25 сообщений из 33, страница 1 из 2
генерация случайного числа для каждой ячейки
    #39422428
95bugimen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
смотрите есть запрос на генерацию случайных чисел в определенное поле
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" ,чтобы он не трогал уже заполненные ячейки?
...
Рейтинг: 0 / 0
генерация случайного числа для каждой ячейки
    #39422432
95bugimen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я ,языка не знаю,это собрано по гуглу было...
...
Рейтинг: 0 / 0
генерация случайного числа для каждой ячейки
    #39422446
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
95bugimen,

Вы бы изложили изначальную задачу, без своего видения, типа - как сесть на стул из которого торчит гвоздь?
А то у вас получилось что-то типа - сгибаю ноги в коленях - в пятую точку нечто колет...

куча вопросов:
- случайные числа какие и в каком диапазоне?
- должны повторяться или нет?
- ....
...
Рейтинг: 0 / 0
генерация случайного числа для каждой ячейки
    #39422452
95bugimen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag,там функция для случайных чисел и диапазон уже есть "Int((300 - 200 + 1) * Rnd() + 200)",нужно чтобы был запрос для каждой ячейки определенного поля создавал случайные числа,но для каждой ячейки это число должно быть свое, у меня в программе,он генерирует числа ,но для всего поля,т.е. чтобы в поле все числа были разные . [img=поле.png]
...
Рейтинг: 0 / 0
генерация случайного числа для каждой ячейки
    #39422453
хм-м-м
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
диапазон понятен из формулы - от 200 до 300.
Код: vbnet
1.
Int((300 - 200 + 1) * Rnd() + 200)
...
Рейтинг: 0 / 0
генерация случайного числа для каждой ячейки
    #39422456
хм-м-м
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
95bugimen,

а объяснять без картинок, словами, плохо получается?)))
...
Рейтинг: 0 / 0
генерация случайного числа для каждой ячейки
    #39422460
95bugimen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хм-м-м,
ну вон человек не понял,попросил разьяснить
...
Рейтинг: 0 / 0
генерация случайного числа для каждой ячейки
    #39422468
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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, а записи заполнены без повторений рандомизатора.

Мдя... чтобы ответить - тз, придется придумывать самому... не так придумал, не так ответил, соответственно...
...
Рейтинг: 0 / 0
генерация случайного числа для каждой ячейки
    #39422472
95bugimen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag,ахха а до меня долшо,все куда проще [пук] is null
...
Рейтинг: 0 / 0
генерация случайного числа для каждой ячейки
    #39422478
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
95bugimenvmag,ахха а до меня долшо,все куда проще [пук] is null
ага... первое число будет например 210
все пуки null, всем пропишется один раз 210 и пуков с null имхо больше не будет...
...
Рейтинг: 0 / 0
генерация случайного числа для каждой ячейки
    #39422479
хм-м-м
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
95bugimenvmag,ахха а до меня долшо,все куда проще [пук] is nullсомневаюсь я, однако.)))
и в том, что дошло.
и в том, что это правильное решение.
...
Рейтинг: 0 / 0
генерация случайного числа для каждой ячейки
    #39422480
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
95bugimen,

тут слабое место - отсутствие повторений рандомизатора, а это значит, что каждый раз нужно проверять выпадало ранее число или нет...
...
Рейтинг: 0 / 0
генерация случайного числа для каждой ячейки
    #39422526
ИВП.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А что, если каким-либо образом заполнить случайными числами (неважно из какого диапазона) вспомогательное поле, затем отсортировать по этому полю, затем пронумеровать записи по порядку от 200 до 300?
...
Рейтинг: 0 / 0
генерация случайного числа для каждой ячейки
    #39422533
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИВП.,

тоже вариант, только задача на счет отсутствия повторов случайных чисел не снимается, а так - вполне, и диапазон здесь как раз архи важен, например вероятность повтора выпадения одинаковых чисел из диапазона 0 - 1 000 000 000 000, теоретически меньше чем из диапазона 200 - 300. а проверку на дубли можно один раз сделать в конце и если повторения есть - повторить тупо заполнение с самого начала
...
Рейтинг: 0 / 0
генерация случайного числа для каждой ячейки
    #39422537
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИВП.А что, если каким-либо образом заполнить случайными числами (неважно из какого диапазона) вспомогательное поле, затем отсортировать по этому полю, затем пронумеровать записи по порядку от 200 до 300?

не..... все супер, никаких проверок не нужно, и даже если повторы будут - не страшно, нумерация всё зашлифует как нужно... молодца!
...
Рейтинг: 0 / 0
генерация случайного числа для каждой ячейки
    #39422580
хм-м-м
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ИВП.А что, если каким-либо образом заполнить случайными числами (неважно из какого диапазона) вспомогательное поле,
затем отсортировать по этому полю, затем пронумеровать записи по порядку от 200 до 300?Но с таким же успехом можно было сразу просто пронумеровать.
Или нет?
Можете объяснить разницу?
Я, честно, смысла не особо вижу.
...
Рейтинг: 0 / 0
генерация случайного числа для каждой ячейки
    #39422587
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хм-м-мМожете объяснить разницу?

одно дело просто перенумеровать...
другое дело перемешать, потом пронумеровать...

Например есть 36 шаров (от 1 до 36)
Нужно написать эмулятор игры 5 из 36 на 10 тиражей при котором 10 раз будут выбираться 5 случайных чисел...

Самый простой вариант - перемешать и взять первые пять по списку...
Если не перемешивать, то 10 раз будут шары 1, 2, 3, 4, 5...

В общем, если операция одноразовая - то как не парадоксально - ваш вариант - тупо пронумеровать самый оптимальный.
Но если многоразовая, то не покатит...
...
Рейтинг: 0 / 0
генерация случайного числа для каждой ячейки
    #39422595
хм-м-м
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmagхм-м-мМожете объяснить разницу?

одно дело просто перенумеровать...
другое дело перемешать, потом пронумеровать...Да это-то мне с самого начала ясно.
Дает ли это перемешивание какую-либо пользу в свете задачи ТС?
vmagкак не парадоксально - ваш вариант - тупо пронумеровать самый оптимальныйВ некотором смысле да.
...
Рейтинг: 0 / 0
генерация случайного числа для каждой ячейки
    #39422598
хм-м-м
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хм-м-мВ некотором смысле да.Сейчас попробую придумать получше,
строго по условию задачи.
...
Рейтинг: 0 / 0
генерация случайного числа для каждой ячейки
    #39422612
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот, готово, только имена таблицы и полей другие:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Sub Macro1()
 Dim S As String, _
     B(200 To 300) As Boolean
 Dim LRandomNumber As Integer
 Randomize
 Do While DCount("*", "Tabl", "zz Is Null") > 0
  Do While True
   LRandomNumber = Int((300 - 200 + 1) * Rnd() + 200)
   If Not B(LRandomNumber) Then
    B(LRandomNumber) = True
    CurrentDb.Execute ("UPDATE Tabl SET zz=" & LRandomNumber & _
                       " WHERE id=(SELECT TOP 1 id FROM Tabl WHERE zz Is Null)")
    Exit Do
   End If
  Loop
 Loop
End Sub
...
Рейтинг: 0 / 0
генерация случайного числа для каждой ячейки
    #39422641
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__MichelleВот, готово

Супер, будет работать - однозначно!
Самое интересное, что давным давно именно этот алгоритм мне и пришлось усовершенствовать... даже премию дали...

Если элементов для перемешки много, то выборка элементов идет не линейно по времени и оно заметно не постоянно, первые выбираются мгновенно, а ближе к концу рандомизатор всё чаще начинает долбиться в B(LRandomNumber) = False, которые уже выбраны, и когда например осталось выбрать последние из 1000 (типа 131, 7, 967), а в эти лунки снаряд ну никак не хочет попадать - создается ощущение, что задача вообще зависла...
Перемешка может идти и минуту и пять и десять, все зависит от количества элементов и быстродействия эвм.

Суть рац предложения как раз и была в том, что для выбора одного случайного элемента рандомизатор используется только один раз (если выборка в этом месте случилась ранее, то берется первое не выбранное место правее, а при достижении конца выборки, продолжаем искать не выбранный левее от места попадания)

Но ваш вариант точно рабочий, причем все задержки можно выдать не посвященным за качественное перемешивание
покатит...
...
Рейтинг: 0 / 0
генерация случайного числа для каждой ячейки
    #39422664
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmagПеремешка может идти и минуту и пять и десять, все зависит от количества элементов и быстродействия эвм.Проверила.
На 1000 записей, во всех записях поле для заполнения пустое.
Получилось 3,53125 сек .
Характеристики компьютера (далеко не супер):
Процессор x86 Family 6 Model 15 Stepping 13 GenuineIntel ~1799 МГцВсего виртуальной памяти 2.00 ГБДоступно виртуальной памяти 1.96 ГБФайл подкачки 3.81 ГБ
...
Рейтинг: 0 / 0
генерация случайного числа для каждой ячейки
    #39422675
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Michelleво всех записях поле для заполнения пустое

да - в вашем алгоритме это важно, иначе
при таком условии
Код: vbnet
1.
Do While DCount("*", "Tabl", "zz Is Null") > 0


перемешки вообще не будет...
Меня интересует другое:
поставьте после строки
Код: vbnet
1.
LRandomNumber = Int((300 - 200 + 1) * Rnd() + 200)


счетчик (думаю лонга хватит) и скажите (если не трудно) его значение в конце заполнения - это количество включения рандомизатора для перемешки 1000 элементов, если мне не изменяет память до для перемешки 10-20 элементов рандомизатор используется около сотни раз...
...
Рейтинг: 0 / 0
генерация случайного числа для каждой ячейки
    #39422679
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag,

Хорошо. Сделаю.
Но немного позже.
Сейчас меня к компьютеру не пускают.)))
...
Рейтинг: 0 / 0
генерация случайного числа для каждой ячейки
    #39422711
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
95bugimen,
Как я понял , задача стоит в случайной выборке нескольких несовпадающих значений из множества? Есть готовые алгоритмы . Вот один их них http://www.planetaexcel.ru/techniques/2/94/ (способ 3) . Можно адаптировать его к вашей задаче.
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / генерация случайного числа для каждой ячейки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]