Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2011, 15:09   #1
3BEPOBOY
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 82
По умолчанию Генератор случайных чмсел на основе вероятностей

Добрый день.
Я так понимаю random дает равномерное распределение, то есть для random(100)+1 я имею одиныковый шанс получить разные числа в интервале [1;100]
Хочу такой алгоритм, чтобы
в 10% случаев получать [80;100]
в 20% [60;80)
в 30% [10;20)
в 40% [20;60)

Как это лучше реализовать?
Пока писал сообщение, придумал такой способ:

Код:
i:=random(100)+1
if (i>0) and (i<=10) then x:=random(21)+80
                     else if (i>10) and (i<=30) then x:=random(20)+60
                                                else if (i>30) and (i<=60) then x:=random(10)+10
                                                                           else x:=random(40)+20;
Может получше что есть, подскажите пожалуйста.

А вот на этот счет вообще никаких идей пока нет:
Я хочу чтобы к числу Х рандомно прибавлялись 7 следующих чсел -0.15*Х; -0.1*Х; -0.05*Х; 0; 0.15*Х; 0.1*Х; 0.05*Х;

что-то похожее на VBA делал. Но там просто с числами от -1,5 до 1,5 с шагом в 0,5
Код:
a = Cells(i, j).Value
y = Int(Rnd(1) * 7) / 2 - 1.5
a = a + y
Cells(j, i) = a

Последний раз редактировалось 3BEPOBOY; 01.04.2011 в 15:14.
3BEPOBOY вне форума Ответить с цитированием
Старый 02.04.2011, 16:45   #2
3BEPOBOY
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 82
По умолчанию

Так ничего лучше и не придумал

насчет 2ого варианта все просто, странно что сразу не сообразил
Код HTML:
x:=(random(7)-3)/20;
y:=y*x;
3BEPOBOY вне форума Ответить с цитированием
Старый 02.04.2011, 16:59   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
y = Int(Rnd(1) * 7) / 2 - 1.5
Код:
y:=round(random*7/2-1.5)
если память не ошибает.

P.S. Ну вот... стоит мне пост вписать как авторы уже сами додумываются... Что за день сегодня такой?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.04.2011, 17:26   #4
3BEPOBOY
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 82
По умолчанию

Stilet
кроме 1 и 0 ничего не выдает. Ну да бог с ним. У меня сейчас другой вопрос на повестке дня. Хотя теме уже немного не соответствует... но все же.

Никто не сталкивался с подобными генераторами задач?
расстояние для каждой пары точек задано в матрице.

Я на днях читал про простейшую игру на делфи - "Тир", там на каком-то image объекте генерировали случайным образом координаты мишеней и стреляли. Я что-то похожее могу применить для своих целей?

Надо наверное отдельную тему создать. Только сформулирую вопрос получше
Изображения
Тип файла: jpg Снимок1.JPG (26.5 Кб, 113 просмотров)
Тип файла: jpg Снимок2.JPG (103.6 Кб, 134 просмотров)

Последний раз редактировалось 3BEPOBOY; 02.04.2011 в 17:36.
3BEPOBOY вне форума Ответить с цитированием
Старый 25.12.2011, 15:04   #5
Аудунн
Новичок
Джуниор
 
Регистрация: 25.12.2011
Сообщений: 1
По умолчанию

3BEPOBOY
огромное спасибо за афигительный способ генерирования чисел с заданной вероятностью
я реализовал его для своих нужд - для генерирования результатов футбольных матчей
на языке RUBY ON RAILS


n = 2
n.times do
i=rand(101)
if (i>=0) && (i<=2)
x=7
elsif (i>2) && (i<=6)
x=6
elsif (i>6) && (i<=12)
x=5
elsif (i>12) && (i<=23)
x=4
elsif (i>23) && (i<=36)
x=3
elsif (i>36) && (i<=50)
x=2
elsif (i>50) && (i<=71)
x=1
elsif (i>71) && (i<=100)
x=0
end
puts x
end

то есть от 0 до 7 забитых голов у меня может быть в данном случае,рандомно

Последний раз редактировалось Аудунн; 25.12.2011 в 15:04. Причина: Исправление
Аудунн вне форума Ответить с цитированием
Старый 24.01.2012, 12:22   #6
Marinesku
Пользователь
 
Регистрация: 01.12.2009
Сообщений: 13
По умолчанию

И я тоже, пока читал сообщение, придумал примерно то же самое. Самый нормальный вариант.
Marinesku вне форума Ответить с цитированием
Старый 26.01.2012, 18:48   #7
Cerebrum
Пользователь
 
Регистрация: 21.03.2009
Сообщений: 24
По умолчанию

Через case все значительно красивее и понятнее
Код:
          case random(100) of
0..39:      a:=random(20)+1;
40..62:     a:=random(20)+21;
63..67:     a:=random(20)+41;
68..99:     a:=random(20)+61;
          end;
Cerebrum вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Генератор случайных чисел Evgenii(Евгений) Помощь студентам 6 23.01.2011 22:41
C++ генератор случайных чисел sir.andrey Помощь студентам 4 03.09.2010 12:22
Генератор случайных чисел на основе шума звуковой карты dx+ Общие вопросы Delphi 7 20.06.2009 09:52
генератор случайных чисел на С++ ANTI Общие вопросы C/C++ 20 12.04.2009 13:02
Генератор случайных чисел psychopat Общие вопросы Delphi 11 18.02.2009 10:39