#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% и т.д. Нужен алгоритм для рандомного распределения указанного количества процентов, на указанное число разделов!
#2
by Живой Ископаемый
отличная новость. Тот кому это нужно сколько платит? Или как он пробовал делать и у него нифига не вышло?
#3
by Ursus maritimus
Интересно, как он собирается проект выполнять, если даже проценты распределить не может?
#4
by Storm2404
Feunoir, спасибо конечно) но мне не нужно чтобы было одинаково во всех, нужен рандом, поделить я и сам могу)
#6
by Живой Ископаемый
2 Спасибо, что не оставляете нас в беззвестности по поводу того что вам НЕ нужно и ваших умений. Это всем крайней важно знать.
#7
by Storm2404
проектов много, а сидеть вручную распределять трудоемкость трудозатратно тем более это просто формальность, так что нужна прога, закодить я и сам могу, нужен алгоритм или хотя бы логику расписать
#10
by Storm2404
светлый гений, тогда откуда мне значения взять, нужно чтобы генератор случайностей сгенерировал 102 значения, которые в сумме бы давали 85?
#11
by Sidney
:) Смешно переименовали. Но маленькая проблемка все таки есть. Можно получить рандомно 102 числа, но в сумме они дадут меньше процентов чем хотелось бы, так что тут нужны еще пара проверок.
#14
by Живой Ископаемый
не всякий сумеет каждое рандомно полученное число отнимать от 85, чтобы последующие рандомно получаемые это учитывали...
#15
by Рэйв
хотя я вообще не понимаю причем тут генерация случайных чисел... Ответ уже дали в по аналогии: присвой 101 значению 0.8333, а хвос положи на 102-е
#18
by Sidney
Я бы пошел по другому Есть результат деления 85 на 102, значит все числа должны быть в этом районе(0,7 - 1). Добавлять в массив только числа из этой области. Остаток кинуть на 102
#20
by Aleksey
Кто тему переименовал? Пуст скажет как в 8-ке получить рандомное число При условии что даже в описании сказано ГенераторСлучайныхЧисел (RandomNumberGenerator) Конструктор по умолчанию Синтаксис: Новый ГенераторСлучайныхЧисел(<НачальноеЧисло>) Параметры: <НачальноеЧисло> (необязательный) Тип: Число. Начальное число, которым инициализируется генератор случайных чисел. Описание: Генератор случайных чисел инициализируется начальным числом из параметра. Последовательность случайных чисел для одного и того же начального числа будет одинакова. (!)
#21
by zzerro
Так в чем проблема то... Сгенерируй массив из 102 случайных чисел, и распредели оставшиеся 85% по этой базе.
#23
by vde69
берешь рандом от 40 до 60% делишь все оставшиеся проекты на 2 части по этому рандому, далее каждую часть тоже делим пополам в рандоме от 40 до 60 %
#25
by mih_io
в легкое элегантное и красивое решение. И получишь свой рандом везде и быстро сделаешь.
#27
by dmpl
Уж 100 лет методе: складываешь полученные 102 числа, делишь 85 на полученную сумму, а затем каждое число умножаешь на результат деления. Вуаля - сумма будет 85. А случайные числа можно брать из любого диапазона. Hint - лучше брать не просто случайное число, а некий минимум трудоемкости и прибавлять к нему случайное число.
#28
by dmpl
Кстати, автор правильно считает - в 1С нельзя получить случайное число. Потому что ГСЧ выдает последовательность псевдослучайных чисел. Которая очень легко повторяется при одинаковом начальном значении числа, переданном в конструктор.
#29
by el-gamberro
Мне кажется это неправда. ГСЧ работает от времени работы микропроцессора компа, поэтому резальты всегда разные будут.
#33
by dmpl
Из СП для конструктора по умолчанию: Генератор случайных чисел инициализируется начальным числом из параметра. Последовательность случайных чисел для одного и того же начального числа будет одинакова. И все равно это будет псевдослучайная последовательность, зная члены которой и алгоритм вполне можно вычислить как следующие, как и предыдущие числа.
#34
by VladZ
А нафига? Так и напиши: 85% отводится на оставшиеся 102 раздела. Пусть кому нужно и греет голову...
#36
by Aleksey
Когда кажется креститься надо, а то чёрт покажется. Для кого я справку в из ЖКК привёл?
#41
by zyto
передавай хэш от текущего времени, даты, положения луны, знака зодиака, цвета юбки бухгалтера и т.д.
#43
by Aleksey
т.е. я должен подать на генератор случайное число чтобы в ответ получить псевдослучайное? Мне одному кажется что где то здесь подвох
#44
by zyto
Тебе - не нужен. Разрешаю отказаться от его использования. (выглядывая из окошка в коридор): Следующий!
#45
by Lama12
Сделал бы тупо. Взял 102 раздели на 51 пару. Принял бы что разброс составляет N. Далее величина на первом значении в паре = 0.8333 * N * (Случайное число от 0 до 1). Величина второго значения = 2*0.8333 - (первое значение). Задача решена. Для случая с нечетным количеством работ можно ввести дополнительную погрешность, и ее скинуть на последний элемент. Но ИМХО. Для управления проектами - хреново. Либо декомпозиция работ проведена излишняя, либо что-то не так. В общем херня.
#46
by Lama12
+ Естественно N подбирается так что б не первое ни второе значение не выходило за установленные рамки. Это просто. Думаю автор сам догадается как это сделать. Уж полностью то решать - скучно.
#49
by Lama12
По поводу ГСЧ. Уже столько копьев переломано. Численными методами создать ГСЧ - не возможно. Там где нужен действительно ГСЧ, используют физические генераторы. Они запрещены к распространению в РФ. Есть способы получения случайности от внешних физических устройств при помощи пользователя (клавиатура, мышь, и т.д.), но это отдельная тема.
#52
by dmpl
Не случайное, а псевдослучайное. Для ларька сойдет. Для генерации криптографического ключа - нет.
#53
by MSII
Ради бога. Можно и гуид. Чисто теоретически гуид может повториться, текущее время нет, на практике нет разницы. Да я как бы в курсе. Где там в про генерацию ключей написано?
#54
by Sidney
Епт, куда всех понесло? Человеку нужны 102 случайных числа. Всего лишь. А вы ту про последовательности и проч. Колесо блин еще изобретите.
#56
by dmpl
1. Чисто теоретически, если пользователей больше 1, то вероятность повторения времени достаточно высока. И чем больше пользователей - тем больше вероятность. Вот сейчас у 200 активных пользователей порядка 5 пар нашлось с одинаковым до секунды временем начала работы, и даже 1 тройня с одинаковым временем. 2. Вопрос был про случайное число, а не псевдослучайное.
#58
by MSII
А у него и будет каждый раз последовательно 10 чисел (каждый раз новая последовательность), сколько бы раз он не запускал свою обработку. Ага, более того, один пользователь может инициировать несколько сеансов. Но мы же понимаем, что в контексте решения задачи из это несущественно.
#62
by Волшебник
тупой радиоприёмник с частотой между радиостанциями выдаёт чистый белый шум с кучей случайных чисел
#63
by Волшебник
тупо записываешь звук-шум, сохраняешь в файл. Когда нужны случайные числа, берёшь оттуда
#64
by orefkov
Держи: Функция ДобавитьСлучайнуюСтроку(тз, гсч, з) с = тз.Добавить; с.ДляПеремешивания = гсч.СлучайноеЧисло; с.Значение = з; КонецФункции Функция Раскидать(Знач Сколько, Знач НаСколько) тз = Новый ТаблицаЗначений; тз.Колонки.Добавить("Значение"); тз.Колонки.Добавить("ДляПеремешивания"); гсч = Новый ГенераторСлучайныхЧисел(ТекущаяУниверсальнаяДатаВМиллисекундах); Среднее = Окр(Сколько / НаСколько, 2); Диапазон = Среднее / 200; Для Номер = 1 По НаСколько - 2 Цикл Отклонение = Окр(Диапазон * гсч.СлучайноеЧисло(0, 100), 2); ДобавитьСлучайнуюСтроку(тз, гсч, Среднее + Отклонение); ДобавитьСлучайнуюСтроку(тз, гсч, Среднее - Отклонение); Сколько = Сколько - Среднее - Среднее; Номер = Номер + 1; КонецЦикла; Если НаСколько % 2 = 0 Тогда // Количество чисел четное, осталось не заполненным 2 значения з = Среднее + Окр(Диапазон * гсч.СлучайноеЧисло(0, 100), 2); ДобавитьСлучайнуюСтроку(тз, гсч, з); Сколько = Сколько - з; КонецЕсли; ДобавитьСлучайнуюСтроку(тз, гсч, Сколько); тз.Сортировать("ДляПеремешивания"); тз.Колонки.Удалить("ДляПеремешивания"); Возврат тз; КонецФункции
Тэги: Математика и алгоритмы
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
В этой группе 1С
- КД. Простой вопрос. Алгоритмы
- Почему Номер платежного поручения не может быть больше 1000 ?
- Как программно поменять модуль и макет внешней обработки?
- Обновление данных на УФ после изменения параметра "Ключ"
- Как работать с диском ИТС в терминале?
- Конфликт блокировок при выполнении транзакции
- Нужно удалить док. Выемка ДС из кассы ККМ
- Комплексная Автоматизация - учет по срокам годности.
- Не получается скрыть колонку табличной части.
- УФ: Как определяется состав командной панели документа?
- Изменить проводки документа Отчет о розничных продажах
- УПП как из многопередельного производства получить расход материалов одним доком
- v7: Регламентированная отчетность Бух 1С 7.7
- Как получить пустую ссылку с типом значения как у ПолеКомпоновкиДанных
- Оказание материальной помощи физ. лицу
- Yandex-map (api). Ошибка сценария. Как программно удалить куки яндекс?
- УПП: Перемещение не формирует движений по НУ
- Выбрать тип справочника и выбрать элементы
- Как рассчитать среднедневное потребление товара?
- v8: Как из СКД выдрать результаты и програмно обойти их?