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