Генератор случайных чисел в 1С
Перем глСлучайноеЧисло Экспорт;
Функция глРанд(От=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.
Вот пример простенькой функции:
Функция ПолучитьСлучайноеЧисло(Мин,Макс)
//вместо Ranodmize
Для н = 1 По 100 Цикл
Уник = Новый УникальныйИдентификатор;
КонецЦикла;
Уник = СокрЛП(Новый УникальныйИдентификатор);
Уник = СтрЗаменить(Уник,"-","");
Уник = СтрЗаменить(Уник,"a","");
Уник = СтрЗаменить(Уник,"b","");
Уник = СтрЗаменить(Уник,"c","");
Уник = СтрЗаменить(Уник,"d","");
Уник = СтрЗаменить(Уник,"e","");
Уник = СтрЗаменить(Уник,"f","");
Сумма = 0;
Для н = 1 По СтрДлина(Уник) Цикл
Сумма = Сумма + Число(Сред(Уник,н,1));
КонецЦикла;
СлучЧисло = Число(Прав(Сумма,1)) / 10;
СлучЧислоИзИнтервала = Мин(Макс(Окр(Мин + (Макс-Мин)*СлучЧисло),Мин),Макс);
Возврат СлучЧислоИзИнтервала;
КонецФункции
|