Генератор случайных чисел. 1СV7
03.10.2006
09:39
#1
"Может ли кто-нибудь подкинуть идейку,
как можно сгенерить в 1С-ке случайные числа,
с заданием интервала,
Например: от 1 до Список.РазмерСписка();?
Есть мысль использовать для этого GUID (через внешнюю компоненту V7Plus). Может есть ещё что-нибудь?"
как можно сгенерить в 1С-ке случайные числа,
с заданием интервала,
Например: от 1 до Список.РазмерСписка();?
Есть мысль использовать для этого GUID (через внешнюю компоненту V7Plus). Может есть ещё что-нибудь?"
03.10.2006
10:44
#2
Например в начале берём "ТекущееВремя(<Час>,<Мин>,<Сек>)"
А далее от этого отталкиваемся.
А далее от этого отталкиваемся.
03.10.2006
13:21
#3
Да я знаю, что к таймеру можно привязать.
Все равно, это будет псевдо-случайное число. Нужно, чтобы оно линейно генерировало числа, а не так, чтоб пик приходился на середину (начало или конец интервала). Хотя в принципе, подойдет и псевдо. Вся загвоздка в формулах:
Нужно задать интервал от 1 до Х (к примеру) и получить случайное число. Конец интервала (Х) постоянно меняется.
Все равно, это будет псевдо-случайное число. Нужно, чтобы оно линейно генерировало числа, а не так, чтоб пик приходился на середину (начало или конец интервала). Хотя в принципе, подойдет и псевдо. Вся загвоздка в формулах:
Нужно задать интервал от 1 до Х (к примеру) и получить случайное число. Конец интервала (Х) постоянно меняется.
03.10.2006
13:33
#4
Формулы для генератора нужно поискать в справочниках. Или, например, воспользоваться функцией RND из VBScript...
Некоторые примеры есть тут: тут:
Некоторые примеры есть тут: тут:
03.10.2006
16:53
#5
"//Генерирование случайных чисел взято по примеру Кайгородова Андрея aka mszsuz
Перем СлучайныйФактор;
//______________________________________________________ __
//инициализация случайной переменной для использования в дальнейшем
Процедура ПосеятьЧисло()
Перем ч,м,с;
ТекущееВремя(ч,м,с);
СлучайныйФактор=ч*24+м*60+с;
КонецПроцедуры
//____________________________________ ____________________
//функция получения случаного числа от 1 до заданного значения
Функция СлучайноеЧисло(Максимум) Экспорт
СлучайныйФактор=(13*СлучайныйФактор+13849)%65536;
Возврат ((СлучайныйФактор%Максимум)+1);
КонецФункции"
Перем СлучайныйФактор;
//______________________________________________________
//инициализация случайной переменной для использования в дальнейшем
Процедура ПосеятьЧисло()
Перем ч,м,с;
ТекущееВремя(ч,м,с);
СлучайныйФактор=ч*24+м*60+с;
КонецПроцедуры
//____________________________________
//функция получения случаного числа от 1 до заданного значения
Функция СлучайноеЧисло(Максимум) Экспорт
СлучайныйФактор=(13*СлучайныйФактор+13849)%65536;
Возврат ((СлучайныйФактор%Максимум)+1);
КонецФункции"
05.10.2006
06:41
#6
Cпасибо.
Привязка к таймеру, конечно, весчь хорошая, но когда за 1 секунду выбирается из списка до 15-20 значений (весь список 200-300 зн.), получается, что выборка происходит партиями (по 15-20 одинаковых значений).
Но в принципе, решил задачу так:
Генератор сл.чисел на таймере + Удаление уже использованных значений списка + добавление N-ного числа к случайному при следующей выборке из списка значений + смена направления сортировки списка.
Вроде-бы, картина более-менее получилась реальная.
Привязка к таймеру, конечно, весчь хорошая, но когда за 1 секунду выбирается из списка до 15-20 значений (весь список 200-300 зн.), получается, что выборка происходит партиями (по 15-20 одинаковых значений).
Но в принципе, решил задачу так:
Генератор сл.чисел на таймере + Удаление уже использованных значений списка + добавление N-ного числа к случайному при следующей выборке из списка значений + смена направления сортировки списка.
Вроде-бы, картина более-менее получилась реальная.
05.10.2006
08:29
#7
Выше же был пример.
А то что за секунду выбирается несколько одинаковых значений - это недостаток алгоритма.
А начальная инициализация от таймера- это практически все генераторы так делают. Берём дату и время и инициализируем.
Можешь ещё добавить имя пользователя/компьютера.
А использованные значения из списка удалять-то зачем? это же генератор случайных чисел и повтореня вполне реальны.
А то что за секунду выбирается несколько одинаковых значений - это недостаток алгоритма.
А начальная инициализация от таймера- это практически все генераторы так делают. Берём дату и время и инициализируем.
Можешь ещё добавить имя пользователя/компьютера.
А использованные значения из списка удалять-то зачем? это же генератор случайных чисел и повтореня вполне реальны.
Читают тему
(гостей: 1)