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

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

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2013, 16:23   #1
drayvhard
 
Регистрация: 13.07.2012
Сообщений: 7
По умолчанию Работа со случайными числами

Привет..
подскажите, как можно решить проблему:

у нас есть кортежи (string, double)

string - это имя категории, double - это мат ожидание появления этой категории

мне нужно "бросить кости" и узнать - какая категория выпала
drayvhard вне форума Ответить с цитированием
Старый 03.12.2013, 16:30   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

дык бросайте....
Код:
echo rand();
читать тут
ADSoft вне форума Ответить с цитированием
Старый 03.12.2013, 16:38   #3
drayvhard
 
Регистрация: 13.07.2012
Сообщений: 7
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
дык бросайте....
Код:
echo rand();
читать тут
я понимаю, что мы получим значение от 0 - 1. но каким образом это привязать к мат ожиданию?

то есть:

яблоко - 0,3
груша - 0,2
вишня - 0,5

кидаем rand(), получаем значение от 0 к 1. каким образом определить, какая категория...

и что будет, если мат ожидание всех фруктов будут равными

Последний раз редактировалось drayvhard; 03.12.2013 в 16:43.
drayvhard вне форума Ответить с цитированием
Старый 03.12.2013, 16:48   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

условный оператор знаете?
берите полученное случайное число в диапазоне от нуля до 1
и проверяйте:
Код:
если ПолученноеЧисло<0.3 then Яблочко
иначе
  если (ПолученноеЧисло>=0.3) and (ПолученноеЧисло<0.5) then Груша
  иначе Вишенка
p.s. код, надеюсь, сами напишете?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.12.2013, 16:52   #5
drayvhard
 
Регистрация: 13.07.2012
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
условный оператор знаете?
берите полученное случайное число в диапазоне от нуля до 1
и проверяйте:
Код:
если ПолученноеЧисло<0.3 then Яблочко
иначе
  если (ПолученноеЧисло>=0.3) and (ПолученноеЧисло<0.5) then Груша
  иначе Вишенка
p.s. код, надеюсь, сами напишете?!
так всё просто? А если мат ожидание равное - то просто нужно считать кумулятивные суммы и всё?
То есть,

if (val <=0,33) then apple
else if(val>0.33 && val <=0.66) then pear else cherry;

типо так?

наверное, нет.
если мат ожидание равное, то нужно наугад выбрать одно из числл, типа rand(1;3), где 1:3 - номера категорий по-порядку?

Последний раз редактировалось drayvhard; 03.12.2013 в 16:55.
drayvhard вне форума Ответить с цитированием
Старый 03.12.2013, 21:24   #6
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

честно говоря я уже подзабыл всю эту математику и мат. ожидания )))
какой там смысл то? что если 0.5 у яблока, то именно в половине случаев должно быть в половине случаев? непонятно....
ADSoft вне форума Ответить с цитированием
Старый 03.12.2013, 22:44   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
так всё просто? А если мат ожидание равное ...

если мат ожидание равное, то нужно наугад выбрать одно из числл, типа rand(1;3), где 1:3 - номера категорий по-порядку?
точно так!

Если вероятность выпадения любого события одинакова, то случайное число от 1 до N [1..N] или, скорее, случайное число от 0 до N-1 [0..N-1] даст нам номер нужного события.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.12.2013, 08:58   #8
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Как-то у вас тут все не изящненько
Код:
function ret(){
  var M = [
      {value:'apple', M:.5},
      {value:'pear', M:.3},
      {value:'cherry', M:.2},
    ];
  var rand = Math.random();
  for (var i = M.length; i--;) {
    if ( M[i].M < rand ) {
      rand -= M[i].M;
    } else {
      return M[i].value
    };
  };
}
Alar, верни репу!
Naive вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
заполнение диапазона случайными числами. cutie_girl Microsoft Office Excel 10 02.11.2012 08:18
Задача со случайными числами Станислав1405 Microsoft Office Excel 2 14.02.2011 17:04
Проблема со случайными числами Renge Помощь студентам 3 24.12.2010 18:04
Заполнение массива случайными числами Roomper Помощь студентам 4 12.05.2008 22:34
Заполнить массив случайными числами forumu Общие вопросы Delphi 13 03.12.2007 22:11