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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2011, 01:56   #1
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию вывод рандомного числа с большей или меньшей вероятностью

что это значит? каков смысл? каков алгоритм вообще?
и причем вероятность в процентах...
скачал exe (консолька, правда на delphi).... вот запускаешь и вывод примерно следующий:
255
вероятность числа 5 - 10%

вот кстати он сам

Последний раз редактировалось unbanned; 18.01.2011 в 02:02.
unbanned вне форума Ответить с цитированием
Старый 18.01.2011, 08:19   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) Ваша программа нагло врёт. почему я так решил?.. потому как я запустил программу раз 15. И девять раз выпало число с надписью вероятность 2%
Не нужно быть учёным, чтобы понять, что из 100 попыток такое число должно было выпасть 2 раза (ну плюс минус отклонения. - но отклонения НЕ МОГУТ быть в 40 раз больше - это противоречит основам теории вероятности.

2) а в чём, собственно проблема?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.01.2011, 15:51   #3
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

программа не моя)) и у меня она тоже вызывает сомнение... вообщем то меня алгоритм интересует... как выполнять такого рода задания? в моем понимании рандом есть рандом... ни о какой вероятности речи и не идет
unbanned вне форума Ответить с цитированием
Старый 18.01.2011, 16:46   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
рандом есть рандом... ни о какой вероятности речи и не идет
ну, всё не так просто. допустим, random(3) даёт нам равновероятное выпадение чисел 0 1 2 (а random() равномерное распределение чисел от нуля до 1 соответственно)

а стоит задача, допустим,
чтобы 0 выпадал в 50% случаев, 1 в 30% случаев, 2 в 20%

тогда можно попробовать замутить такое:
Код:
  r := random();
  if r<0.5 then Rvalue := 0
  else if (r>=0.5) and (r<0.8) then Rvalue := 1
  else Rvalue := 2;
сделайте данный код в виде функции.
вызовите, например, 1000 раз.
при этом подсчитывайте, сколько раз выпал ноль, сколько 1 и сколько 2
результаты выдайте и проанализируйте...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.01.2011, 17:27   #5
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Цитата:
r := random();
if r<0.5 then Rvalue := 0
else if (r>=0.5) and (r<0.8) then Rvalue := 1
else Rvalue := 2;
Красная проверка лишняя )
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 18.01.2011, 19:37   #6
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

0 1 2
482 306 212
474 319 207
488 291 221
499 320 181
478 301 221
508 301 191
504 307 189
527 277 196
491 298 211
528 273 199
486 299 215
516 300 184
487 307 206
491 309 200
503 308 189
519 272 209
511 297 192
482 315 203
497 300 203
498 297 205
485 298 217
505 308 187
543 261 196
514 288 198
477 329 194
529 277 194
487 302 211
515 277 208
487 301 212
479 333 188
493 301 206
496 294 210
521 297 182

хм... да, хоть и с небольшой погрешностью, но в заданном соотношениии...
а как изменить вероятность? ну напр. 50% - 0 и по 25% на 1 и 2...

Код:
 r := random();
  if r<0.5 then Rvalue := 0
  else if (r>=0.5) and (r<0.75) then Rvalue := 1
  else Rvalue := 2;
так?

а если для 5 чисел? ( random(5) )
тогда над составить 4 условия?

Последний раз редактировалось unbanned; 18.01.2011 в 19:49.
unbanned вне форума Ответить с цитированием
Старый 19.01.2011, 07:04   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от veniside
Красная проверка лишняя )
ну, хуже не будет, хотя, я с Вами согласен. сначала хотел три линейных условия подряд написать - без else, а потом решил, что с else чуточку эффективнее будет. а условия не изменил...
Спасибо за замечание.

unbanned,
Цитата:
а как изменить вероятность? ну напр. 50% - 0 и по 25% на 1 и 2...
можно и так. а можно:
Код:
 r := random();
  if r<0.5 then Rvalue := 0
  else if (r<0.75) then Rvalue := 1
  else Rvalue := 2;
а можно и так:
Код:
  r := random();
  if r<0.5 then Rvalue := 0;
  if (r>=0.5) and (r<0.75) then Rvalue := 1;
  if (r>=0.75) then Rvalue := 2;
Цитата:
а если для 5 чисел? ( random(5) )
тогда над составить 4 условия?
точно. кстати, для большого количества чисел лучше использовать линейные проверки (много if подряд). Они, конечно, чуть-чуть медленее будут работать, но зато на порядок нагляднее и удобнее писать/изменять подобный код.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удалить все слова с длиной, большей заданной длины Broken Angel Помощь студентам 3 07.01.2011 15:17
сравнение рандомного числа с массивом Artempokrowski Помощь студентам 8 08.07.2010 14:08
Функция рандомного выставление чисел. PashaNastya Microsoft Office Excel 5 28.03.2010 20:03
Алгоритмы. Работа с вероятностью. anton_kovalev Помощь студентам 2 21.01.2010 10:27
Генерирование рандомного лабиринта Djaconda Паскаль, Turbo Pascal, PascalABC.NET 12 12.11.2007 19:00