Случайные числа в 1...
 
Уведомления
Очистить все

Случайные числа в 1С

1 Записи
1 Пользователи
0 Likes
472 Просмотры
65-150 Okolokompa Форум
(@kalininalex)
Reputable Member
Присоединился: 4 года назад
Записи: 160
Создатель темы  

Первый вариант

Перем RandSeed;
Процедура
 Randomize() 
     
Перем h,m,s;
     ТекущееВремя(h,m,s);
     RandSeed=h*24+m*60+s;
КонецПроцедуры
Функция
 Random(n) Экспорт
     RandSeed=(13*RandSeed+13849)%65536;
     Возврат ((RandSeed%n)+1);
КонецФункции
Процедура
 Сформировать()
     Randomize();
     Для нс=1 по 20 Цикл
          сообщить(Random(10));
    КонецЦикла;
КонецПроцедуры

Второй вариант

Ранд=_GetPerformanceCounter()%(х+1); //х – предел значения случайного числа от 0 до х;

Очень качественный алгоритм от комитета ANSI-C. Работает правда медленнее чуть-чуть, чем те, что выше, зато последовательности выдает просто замечательные.
_getPerformanceCounter() для совместимости с "1С:Совместимо" можно заменить на то, что выше.

var randSeed export;
// ***********
function randomize() export
randSeed=_getPerformanceCounter();
endFunction
// ***********
function random(n) export
randSeed=randSeed*1103515245+12345;
return
 ((randSeed/65536)%32768)%n+1;
endFunction

Третий вариант

Перем GlSeed;
//------------------------------
//Алгоритм 133a (Алгоритмы выпуск №4 под редакцией Агеева. Вычислительный центр АН СССР. 1967)
Функция СлучайноеЧисло(N)
     m35=34359738368;
     m36=68719476736;
     m37=137438953472;
     GlSeed=5*GlSeed;
     Если GlSeed>=m37 Тогда GlSeed=GlSeed-m37 КонецЕсли;
     Если GlSeed>=m36 Тогда GlSeed=GlSeed-m36 КонецЕсли;
     Если GlSeed>=m35 Тогда GlSeed=GlSeed-m35 КонецЕсли;
     Возврат Цел(GlSeed/m35*N)+1;
КонецФункции


   
Цитата
Поделиться: