|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
26.10.2013, 04:16 | #1 |
Новичок
Джуниор
Регистрация: 26.10.2013
Сообщений: 5
|
случайное ветвление
Здравствуйте все!
Возникла вот проблема, к решению которой не знаю как подступиться. Может быть, кто сталкивался, подскажет, что и как. Так вот, представьте себе, что есть некая программа, в начале выполнения которой пользователь может указать желаемые вероятности исполнения трех различных ветвей внутри содержащегося в теле программы цикла. Например, что-то типа этого: объявление массива М[0..99] каких-то констант; объявление какой-то процедуры № 1; объявление какой-то процедуры № 2; объявление какой-то процедуры № 3; ввод параметра Р1 (матожидание для ветви № 1); ввод параметра Р2 (то же для ветви № 2); ввод параметра Р3 (то же для № 3); for і:=0 то 99 do begin if <какое-то условие> then вызов процедуры № 1 (М[i]) //первая ветвь еlse if <еще какое-то условие> then вызов процедуры № 2 (М[i]) //вторая ветвь еlse вызов процедуры № 3 (М[i]); //третья ветвь end; Как видим, отдельные константы из массива М обрабатываются не только по-разному в зависимости от условий, но еще и с вероятностью, не обязательно равной 1 (то есть некоторые могут и вообще остаться нетронутыми, если пользователь установит значение параметра , например, Р2, равным нулю, а другие могут иногда подвергнуться какой-то обработке, а могут и не подвергнуться - случай определяет). Надеюсь, что понятно объяснил задачу. Заранее огромное спасибо тому или тем, кто хотя бы направление укажет, КАК это можно реализовать. |
26.10.2013, 04:27 | #2 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,291
|
Не уверен, но можно попробовать:
Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
Последний раз редактировалось BDA; 26.10.2013 в 04:29. |
26.10.2013, 04:39 | #3 |
Новичок
Джуниор
Регистрация: 26.10.2013
Сообщений: 5
|
При выполнении а получит значение либо 0, либо 1. Параметры Р1, Р2, Р3 - матожидания выполнения 1-й..3-й ветвей соответственно, могут лежать в ДИАПАЗОНЕ от 0 до 1, например, Р1=0,09, Р2=0,56, Р3=0,88 (не зависят друг от друга совершенно). Если последовать вашему коду, то в величинах <р1/(р1+р2+р3)> и <(p1 + p2)/(p1 + p2 + p3)> не вижу никакого смысла, т.к. условиями выбора той или иной ветви могут быть совершенно другие потребности, например, величина константы из массива М. Да дело и не в этих условиях, вообще-то. Просто выбрали при каком-то условии (каком-то), что для данной константы МОЖЕТ (!) быть вызвана процедура № 2 (например). И вероятность ее вызова = параметру Р2 (например). Пытаюсь вот нарыть что-то в генетических алгоритмах, но пока - глухо.
|
26.10.2013, 05:03 | #4 |
Новичок
Джуниор
Регистрация: 26.10.2013
Сообщений: 5
|
Попробую чуток конкретизировать. Предположим, что ВСЕ константы, содержащиеся в массиве М, вполне соответствуют условию, при котором происходит выбор вызова ВТОРОЙ процедуры. Но вызов, не взирая на это, происходит (должен происходить, если точнее) НЕ ВСЕГДА, а согласно матожиданию, равному параметру Р2. Вот, может, так будет более ясным описание проблемы.))
|
26.10.2013, 10:05 | #5 |
Lawful Evil
Участник клуба
Регистрация: 13.05.2008
Сообщений: 1,208
|
Итак, Вы перебираете все константы
Код:
Код:
Код:
Примеры приведены на С++, но, думаю, алгоритм из этого вывести можно.
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c) |
26.10.2013, 12:09 | #6 | |
Новичок
Джуниор
Регистрация: 26.10.2013
Сообщений: 5
|
Цитата:
|
|
26.10.2013, 16:01 | #7 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,291
|
1) random() вернет вещественное число 0<=a<1
2) Приведенный вариант вызывает одну из трех процедур с заданными вероятностями (обязательно будет вызвана одна), но я не учел, что Вы хотите вызвать каждую процедуру с какой-либо вероятностью. Тогда, можно: Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
27.10.2013, 14:19 | #8 |
Новичок
Джуниор
Регистрация: 26.10.2013
Сообщений: 5
|
Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
ветвление | Rfn.if | Помощь студентам | 4 | 13.10.2010 14:26 |
Ветвление | Woxx | Паскаль, Turbo Pascal, PascalABC.NET | 6 | 07.09.2010 17:26 |
ветвление | beygul | Помощь студентам | 11 | 25.08.2010 13:20 |
Ветвление | cerega87 | Паскаль, Turbo Pascal, PascalABC.NET | 5 | 07.06.2010 22:43 |
ветвление | felmor | Помощь студентам | 1 | 28.02.2009 13:42 |