Книга знаний

1С:Предприятие / Приемы программирования

Генератор случайных чисел в 1С

Подборка алгоритмов для генерации случайных чисел и перемешивания.Автор статьи: Волшебник | Редакторы: acsent,
Последняя редакция №2 от 13.01.06 | История
URL: http://kb.mista.ru/article.php?id=25

Перем глСлучайноеЧисло Экспорт;

Функция глРанд(От=0,До=1,Шаг=0,Парам=0) Экспорт

Если Парам<>0 Тогда
 глСлучайноеЧисло=Парам;
КонецЕсли;

Если Число(глСлучайноеЧисло)=0 Тогда
 глСлучайноеЧисло=Число(СтрЗаменить(""+ТекущееВремя(),":",""));
 глСлучайноеЧисло=(16807*глСлучайноеЧисло)%2147483647;
КонецЕсли;

глСлучайноеЧисло=(16807*глСлучайноеЧисло)%2147483647;
глСлучайноеЧисло=макс(глСлучайноеЧисло,-глСлучайноеЧисло);
СлЕд=глСлучайноеЧисло/2147483647;
СлВыб=СлЕд*(До-От)+От;

Если Шаг>0 Тогда
 СлВыб=От+Окр((СлВыб-От)/Шаг)*Шаг;
КонецЕсли;

Возврат(СлВыб);
КонецФункции  

-------------------------------------

http://www.sinor.ru/~my1c/knowhow/rand.html

-------------------------------------

randSeed=ranseed%100000000001;
randSeed=randSeed*1103515245+12345;
и проблемы со скоростью снимаются...  

randSeed=randseed%100000000001;
а так? ;-)

-------------------------------------
Премешать N чисел:
Для а=1 по N цикл
массив[а]=а;
Конеццикла;
Для а=1 по N-1 цикл
Сл=Случ(а,N);// Целое случайное число в интервале [а..N]
К=массив[а];
массив[а]=массив[Сл];
массив[Сл]=К;
КонецЦикла;  

-------------------------------------

Sc    =    CreateObject("MSScriptControl.ScriptControl");
Sc.language    =    "VBscript";
sc.executeStatement("randomize");  
оноВотТутаБудет=Sc.eval("rnd");

Как сделать чтобы числа выбирались произвольно от 1 до 100?  


Ранд=_GetPerformanceCounter()%(100+1);
похоже это лучшеее  

-------------------------------------

Библиотека мат. функций, где есть генератор сл. чисел:
http://1c.proclub.ru/modules/mydownloads/personal.php?cid=92&lid=2688

-------------------------------------

В 8.0 для получения случайных чисел можно использовать встроенный генератор GUID.
Вот пример простенькой функции:

Функция ПолучитьСлучайноеЧисло(Мин,Макс)
   
   Уник = СокрЛП(Новый УникальныйИдентификатор);
   Уник = СтрЗаменить(Уник,"-","");
   Уник = СтрЗаменить(Уник,"a","");
   Уник = СтрЗаменить(Уник,"b","");
   Уник = СтрЗаменить(Уник,"c","");
   Уник = СтрЗаменить(Уник,"d","");
   Уник = СтрЗаменить(Уник,"e","");
   Уник = СтрЗаменить(Уник,"f","");
   Сумма = 0;
   Для н = 1 По СтрДлина(Уник) Цикл
       Сумма = Сумма + Число(Сред(Уник,н,1));
   КонецЦикла;
   СлучЧисло = Число(Прав(Сумма,1)) / 10;
   СлучЧислоИзИнтервала = Мин(Макс(Окр(Мин + (Макс-Мин)*СлучЧисло),Мин),Макс);
   
   Возврат СлучЧислоИзИнтервала;
КонецФункции

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика