"Может ли кто-нибудь подкинуть идейку,<br>как можно сгенерить в 1С-ке случайные числа,<br>с заданием интервала,<br>Например: от 1 до Список.РазмерСписка();?<br>Есть мысль использовать для этого GUID (через внешнюю компоненту V7Plus). Может есть ещё что-нибудь?"
Например в начале берём "ТекущееВремя(<Час>,<Мин>,<Сек>)"<br>А далее от этого отталкиваемся.
Andy2C
03.10.2006
13:21
#3
Да я знаю, что к таймеру можно привязать.<br>Все равно, это будет псевдо-случайное число. Нужно, чтобы оно линейно генерировало числа, а не так, чтоб пик приходился на середину (начало или конец интервала). Хотя в принципе, подойдет и псевдо. Вся загвоздка в формулах:<br>Нужно задать интервал от 1 до Х (к примеру) и получить случайное число. Конец интервала (Х) постоянно меняется.
"//Генерирование случайных чисел взято по примеру Кайгородова Андрея aka mszsuz<br>Перем СлучайныйФактор;<br>//________________________________________________________<br>//инициализация случайной переменной для использования в дальнейшем<br>Процедура ПосеятьЧисло()<br> Перем ч,м,с;<br> ТекущееВремя(ч,м,с);<br> СлучайныйФактор=ч*24+м*60+с;<br>КонецПроцедуры<br>//________________________________________________________<br>//функция получения случаного числа от 1 до заданного значения<br>Функция СлучайноеЧисло(Максимум) Экспорт<br> СлучайныйФактор=(13*СлучайныйФактор+13849)%65536;<br> Возврат ((СлучайныйФактор%Максимум)+1);<br>КонецФункции"
Andy2C
05.10.2006
06:41
#6
Cпасибо.<br>Привязка к таймеру, конечно, весчь хорошая, но когда за 1 секунду выбирается из списка до 15-20 значений (весь список 200-300 зн.), получается, что выборка происходит партиями (по 15-20 одинаковых значений).<br>Но в принципе, решил задачу так:<br>Генератор сл.чисел на таймере + Удаление уже использованных значений списка + добавление N-ного числа к случайному при следующей выборке из списка значений + смена направления сортировки списка.<br>Вроде-бы, картина более-менее получилась реальная.
Выше же был пример.<br>А то что за секунду выбирается несколько одинаковых значений - это недостаток алгоритма.<br>А начальная инициализация от таймера- это практически все генераторы так делают. Берём дату и время и инициализируем.<br>Можешь ещё добавить имя пользователя/компьютера.<br>А использованные значения из списка удалять-то зачем? это же генератор случайных чисел и повтореня вполне реальны.