в 1С нельзя получить случайное число? - Можно! #664693


#0 by Storm2404
В проекте имеется 107 разделов, трудоемкость каждого раздела измеряется в процентах, вся трудоемкость проекта берется за 100%(т.е. 107разделов = 100%). Известна трудоемкость первых 5 разделов, она равна 15%, 1раздел - 1%, 2-ой - 1%, 3-ий - 3%, 4-ый - 5%, 5-ый - 5%. Получается 100%-15%=85%, 85% отводится на оставшиеся 102 раздела. Трудоемкость этих оставшихся 102 разделов не принципиально важна, нужно рандомом раскидать 85% на 102 раздела равномерно так чтобы ни на один из разделов не отводилось больше 1-го процента. Например 6-0,5%, 7 - 0,6%, 8 - 1% и т.д. Нужен алгоритм для рандомного распределения указанного количества процентов, на указанное число разделов!
#1 by Feunoir
=85/102 =0.8333
#2 by Живой Ископаемый
отличная новость. Тот кому это нужно сколько платит? Или как он пробовал делать и у него нифига не вышло?
#3 by Ursus maritimus
Интересно, как он собирается проект выполнять, если даже проценты распределить не может?
#4 by Storm2404
Feunoir, спасибо конечно) но мне не нужно чтобы было одинаково во всех, нужен рандом, поделить я и сам могу)
#5 by Mitriy
ну используй тогда ГенераторСлучайныхЧисел
#6 by Живой Ископаемый
2 Спасибо, что не оставляете нас в беззвестности по поводу того что вам НЕ нужно и ваших умений. Это всем крайней важно знать.
#7 by Storm2404
проектов много, а сидеть вручную распределять трудоемкость трудозатратно тем более это просто формальность, так что нужна прога, закодить я и сам могу, нужен алгоритм или хотя бы логику расписать
#8 by Светлый Гений
запихай значения в массив, а массив рандомно отсортируй
#9 by Sidney
Делить то все могут. А вот складывать - нет. В этом и есть большая проблема...
#10 by Storm2404
светлый гений, тогда откуда мне значения взять, нужно чтобы генератор случайностей сгенерировал 102 значения, которые в сумме бы давали 85?
#11 by Sidney
:) Смешно переименовали. Но маленькая проблемка все таки есть. Можно получить рандомно 102 числа, но в сумме они дадут меньше процентов чем хотелось бы, так что тут нужны еще пара проверок.
#12 by Живой Ископаемый
и это правда крайне трудно...
#13 by Рэйв
Сгенерируй 101 значение, а остаток положи на 102-е. Тогда всегда будет все ровно
#14 by Живой Ископаемый
не всякий сумеет каждое рандомно полученное число отнимать от 85, чтобы последующие рандомно получаемые это учитывали...
#15 by Рэйв
хотя я вообще не понимаю причем тут генерация случайных чисел... Ответ уже дали в по аналогии: присвой 101 значению 0.8333, а хвос положи на 102-е
#16 by Светлый Гений
повтори значения 0,5 0,6 0,7 0,8 0,9 1 1 1 1 1 десять раз и перемешай их
#17 by Светлый Гений
или генери парами, что сумма каждой пары была равна 0,83
#18 by Sidney
Я бы пошел по другому Есть результат деления 85 на 102, значит все числа должны быть в этом районе(0,7 - 1). Добавлять в массив только числа из этой области. Остаток кинуть на 102
#19 by Светлый Гений
+ точнее 0,83 * 2
#20 by Aleksey
Кто тему переименовал? Пуст скажет как в 8-ке получить рандомное число При условии что даже в описании сказано ГенераторСлучайныхЧисел (RandomNumberGenerator) Конструктор по умолчанию Синтаксис: Новый ГенераторСлучайныхЧисел(<НачальноеЧисло>) Параметры: <НачальноеЧисло> (необязательный) Тип: Число. Начальное число, которым инициализируется генератор случайных чисел. Описание: Генератор случайных чисел инициализируется начальным числом из параметра. Последовательность случайных чисел для одного и того же начального числа будет одинакова. (!)
#21 by zzerro
Так в чем проблема то... Сгенерируй массив из 102 случайных чисел, и распредели оставшиеся 85% по этой базе.
#22 by Оболтус
Вручную бы уж заколотил...
#23 by vde69
берешь рандом от 40 до 60% делишь все оставшиеся проекты на 2 части по этому рандому, далее каждую часть тоже делим пополам в рандоме от 40 до 60 %
#25 by mih_io
в легкое элегантное и красивое решение. И получишь свой рандом везде и быстро сделаешь.
#26 by el-gamberro
Ппц, 1с-ники математику в универе прогуливали?:))
#27 by dmpl
Уж 100 лет методе: складываешь полученные 102 числа, делишь 85 на полученную сумму, а затем каждое число умножаешь на результат деления. Вуаля - сумма будет 85. А случайные числа можно брать из любого диапазона. Hint - лучше брать не просто случайное число, а некий минимум трудоемкости и прибавлять к нему случайное число.
#28 by dmpl
Кстати, автор правильно считает - в 1С нельзя получить случайное число. Потому что ГСЧ выдает последовательность псевдослучайных чисел. Которая очень легко повторяется при одинаковом начальном значении числа, переданном в конструктор.
#29 by el-gamberro
Мне кажется это неправда. ГСЧ работает от времени работы микропроцессора компа, поэтому резальты всегда разные будут.
#30 by Sidney
Передавай туда текущее время
#31 by el-gamberro
#32 by Иде я?
Какое количество раз будет делаться это распределение
#33 by dmpl
Из СП для конструктора по умолчанию: Генератор случайных чисел инициализируется начальным числом из параметра. Последовательность случайных чисел для одного и того же начального числа будет одинакова. И все равно это будет псевдослучайная последовательность, зная члены которой и алгоритм вполне можно вычислить как следующие, как и предыдущие числа.
#34 by VladZ
А нафига? Так и напиши: 85% отводится на оставшиеся 102 раздела. Пусть кому нужно и греет голову...
#35 by VladZ
+34 Ну и укажи, что примерно трудоемкость этих 102 разделов примерно одинакова.
#36 by Aleksey
Когда кажется креститься надо, а то чёрт покажется. Для кого я справку в из ЖКК привёл?
#37 by Волшебник
#38 by Aleksey
И будет просто тупо 60 заренее известных последовательностей
#39 by MSII
Не текущее время, а текущую дату. Последовательности случайных числе будут разными.
#40 by Aleksey
в течении дня будет возвращать одно и тоже число
#41 by zyto
передавай хэш от текущего времени, даты, положения луны, знака зодиака, цвета юбки бухгалтера и т.д.
#42 by Aleksey
при таком подходе зачем мне генератор?
#43 by Aleksey
т.е. я должен подать на генератор случайное число чтобы в ответ получить псевдослучайное? Мне одному кажется что где то здесь подвох
#44 by zyto
Тебе - не нужен. Разрешаю отказаться от его использования. (выглядывая из окошка в коридор): Следующий!
#45 by Lama12
Сделал бы тупо. Взял 102 раздели на 51 пару. Принял бы что разброс составляет N. Далее величина на первом значении в паре = 0.8333 * N * (Случайное число от 0 до 1). Величина второго значения = 2*0.8333 - (первое значение). Задача решена. Для случая с нечетным количеством работ можно ввести дополнительную погрешность, и ее скинуть на последний элемент. Но ИМХО. Для управления проектами - хреново. Либо декомпозиция работ проведена излишняя, либо что-то не так. В общем херня.
#46 by Lama12
+ Естественно N подбирается так что б не первое ни второе значение не выходило за установленные рамки. Это просто. Думаю автор сам догадается как это сделать. Уж полностью то решать - скучно.
#47 by MSII
С куёв ли? Ты не в курсе, что возвращает ТекущаяДата?
#48 by MSII
Ты должен подать на вход не случайное, а уникальное число. А вот получишь случайное.
#49 by Lama12
По поводу ГСЧ. Уже столько копьев переломано. Численными методами создать ГСЧ - не возможно. Там где нужен действительно ГСЧ, используют физические генераторы. Они запрещены к распространению в РФ. Есть способы получения случайности от внешних физических устройств при помощи пользователя (клавиатура, мышь, и т.д.), но это отдельная тема.
#50 by Ненавижу 1С
буду тоже ругать автора: как можно быть настолько тупым?
#51 by Aleksey
ТОгда уж СлучайноеЧисло= Из16в10(Новый УникальныйИдентификатор);
#52 by dmpl
Не случайное, а псевдослучайное. Для ларька сойдет. Для генерации криптографического ключа - нет.
#53 by MSII
Ради бога. Можно и гуид. Чисто теоретически гуид может повториться, текущее время нет, на практике нет разницы. Да я как бы в курсе. Где там в про генерацию ключей написано?
#54 by Sidney
Епт, куда всех понесло? Человеку нужны 102 случайных числа. Всего лишь. А вы ту про последовательности и проч. Колесо блин еще изобретите.
#55 by Aleksey
это если нужно раз в час одно число, а если последовательно 10 чисел...
#56 by dmpl
1. Чисто теоретически, если пользователей больше 1, то вероятность повторения времени достаточно высока. И чем больше пользователей - тем больше вероятность. Вот сейчас у 200 активных пользователей порядка 5 пар нашлось с одинаковым до секунды временем начала работы, и даже 1 тройня с одинаковым временем. 2. Вопрос был про случайное число, а не псевдослучайное.
#57 by dmpl
Да он бы уже от руки их проставил бы, если бы действительно было нужно только это :)
#58 by MSII
А у него и будет каждый раз последовательно 10 чисел (каждый раз новая последовательность), сколько бы раз он не запускал свою обработку. Ага, более того, один пользователь может инициировать несколько сеансов. Но мы же понимаем, что в контексте решения задачи из это несущественно.
#59 by Desna
102 случайных числа 100%
#60 by Волшебник
Почему они запрещены к распространению в РФ?
#61 by Поросенок Петр
Путин запретил, наверное.
#62 by Волшебник
тупой радиоприёмник с частотой между радиостанциями выдаёт чистый белый шум с кучей случайных чисел
#63 by Волшебник
тупо записываешь звук-шум, сохраняешь в файл. Когда нужны случайные числа, берёшь оттуда
#64 by orefkov
Держи: Функция ДобавитьСлучайнуюСтроку(тз, гсч, з)    с = тз.Добавить;    с.ДляПеремешивания = гсч.СлучайноеЧисло;    с.Значение = з; КонецФункции     Функция Раскидать(Знач Сколько, Знач НаСколько)    тз = Новый ТаблицаЗначений;    тз.Колонки.Добавить("Значение");    тз.Колонки.Добавить("ДляПеремешивания");    гсч = Новый ГенераторСлучайныхЧисел(ТекущаяУниверсальнаяДатаВМиллисекундах);    Среднее = Окр(Сколько / НаСколько, 2);    Диапазон = Среднее / 200;    Для Номер = 1 По НаСколько - 2 Цикл        Отклонение = Окр(Диапазон * гсч.СлучайноеЧисло(0, 100), 2);        ДобавитьСлучайнуюСтроку(тз, гсч, Среднее + Отклонение);        ДобавитьСлучайнуюСтроку(тз, гсч, Среднее - Отклонение);        Сколько = Сколько - Среднее - Среднее;        Номер = Номер + 1;    КонецЦикла;        Если НаСколько % 2 = 0 Тогда        // Количество чисел четное, осталось не заполненным 2 значения        з = Среднее + Окр(Диапазон * гсч.СлучайноеЧисло(0, 100), 2);        ДобавитьСлучайнуюСтроку(тз, гсч, з);        Сколько = Сколько - з;    КонецЕсли;    ДобавитьСлучайнуюСтроку(тз, гсч, Сколько);    тз.Сортировать("ДляПеремешивания");    тз.Колонки.Удалить("ДляПеремешивания");    Возврат тз; КонецФункции
#65 by Волшебник
ТекущаяУниверсальнаяДатаВМиллисекундах — это что за функция?
#66 by Светлый Гений
реализована в 8.2.17.143
Тэги: Математика и алгоритмы
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С