Основы. Случайные числа

Перем 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;
КонецФункции

Комментарии | опубликовано: 25 Май 2009, 19:22

Извлечение корня

Функция Корень(Основание,Степень)
Если Степень = 1 Тогда
Возврат(Основание);
КонецЕсли;
Факториал = 1; Степень_ = 1; Сум = 0;
СтепеньЕ = 1/Степень*Лог(Основание);
Для ии = 1 по 28 Цикл
Факториал = Факториал * ии;
Степень_ = Степень_ * СтепеньЕ;
Сум = Сум + Степень_/Факториал
КонецЦикла;
Возврат(1+Сум);
КонецФункции

Комментарии | опубликовано: 4 Май 2009, 16:17

Основы. Чтение структуры справочников

Цикл по справочникам
КолвоСправочниковВКонфигурации = Метаданные.Справочник();
Для Ном=1 to КолвоСправочниковВКонфигурации Цикл
кфгСпр = Метаданные.Справочник(Ном);
Идентификатор = кфгСпр.Идентификатор();
ПолныйИдентификатор = кфгСпр.ПолныйИдентификатор();
Синоним = кфгСпр.Синоним();
Комментарий = кфгСпр.Комментарий();
КоличествоУроней = кфгСпр.КоличествоУроней();
ПодчиненЛи = кфгСпр.Владелец().Выбран();
Владелец = кфгСпр.Владелец();
ИдентификаторВладельца = кфгСпр.Владелец().Идентификатор;
.....<и так далее>
КонецЦикла;

т.е. если вызвать метод Метаданные.Справочник() без параметров, то он вернет общее количество справочников в конфигурации. Если передать ему в качестве параметра номер или название справочника, то он вернет справочник как объект конфигурации.
Цикл по реквизитам справочника
кфгСпрСотр = Метаданные.Справочник(“Сотрудники”);
КолвоРеквизитов = кфгСпрСотр.Реквизит();
Для Ном=1 to КолвоРеквизитов Цикл
кфгРекв = кфгСпрСотр.Реквизит(Ном);
Идентификатор = кфгРекв.Идентификатор();
ПолныйИдентификатор = кфгРекв.ПолныйИдентификатор();
Синоним = кфгРекв.Синоним();
Комментарий = кфгРекв.Комментарий();
Тип = кфгРекв.Тип(); //“Строка”, “Число”, “Справочник”
Вид = кфгРекв.Вид(); //напр. “Сотрудники”
Длина = кфгРекв.Длина();
Точность = кфгРекв.Точность();

Периодический = кфгРекв.Периодический();
.....<и так далее>
КонецЦикла;

т.е. если вызвать метод Метаданные.Справочник(Х).Реквизит() без параметров, то он вернет общее количество реквизитов справочника Х в конфигурации. Если передать ему в качестве параметра номер или название реквизита, то он вернет реквизит справочника как объект конфигурации.

Комментарии | опубликовано: 13 Апрель 2009, 16:15


<--- Предыдущая страница Следующая страница --->