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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2013, 14:31   #1
jone
Форумчанин
 
Аватар для jone
 
Регистрация: 27.09.2008
Сообщений: 152
По умолчанию Увеличить или уменьшить вероятность RND

Доброго время суток уважаемые гуру

Есть диапазон 1..100 -- Это random(100)
Как увеличить, либо уменьшить вероятность выпадания скажем 80-100
Вероятность тоже в цифре 1-10 либо проценте
jone вне форума Ответить с цитированием
Старый 04.04.2013, 15:19   #2
netpolice
Форумчанин
 
Аватар для netpolice
 
Регистрация: 14.02.2013
Сообщений: 222
По умолчанию

я бы к примеру Вызвал бы random(200)

А потом все ответы от 0 до 80 оставлял бы без изменения, а остальные бы поделил бы на 6, ну как то так

А уменьшить вероятность random(90) и значения от 80 до 90 умножил бы на 2.

Ну я думаю смысл понятен.

я тут вот еще о чем подумал, а ведь random(90) значение целочисленное, значит надо посмотреть на вещественные типы

Последний раз редактировалось netpolice; 04.04.2013 в 15:24.
netpolice вне форума Ответить с цитированием
Старый 04.04.2013, 15:35   #3
jone
Форумчанин
 
Аватар для jone
 
Регистрация: 27.09.2008
Сообщений: 152
По умолчанию

Цитата:
Сообщение от netpolice Посмотреть сообщение
я бы к примеру Вызвал бы random(200)

А потом все ответы от 0 до 80 оставлял бы без изменения, а остальные бы поделил бы на 6, ну как то так

А уменьшить вероятность random(90) и значения от 80 до 90 умножил бы на 2.

Ну я думаю смысл понятен.

я тут вот еще о чем подумал, а ведь random(90) значение целочисленное, значит надо посмотреть на вещественные типы
Цитата:
var
J:integer;
o:string;
begin
Randomize; Randomize; Randomize; Randomize;
j:=Random(90);

if (j>=80) and (j<=90) then
j:=j*2;


lbl1.Caption:=IntToStr(j);
end;

Тогда они у меня не когда не выпадут же ?
160 - 180

бред какойто ) или я не так понял
jone вне форума Ответить с цитированием
Старый 04.04.2013, 15:42   #4
jone
Форумчанин
 
Аватар для jone
 
Регистрация: 27.09.2008
Сообщений: 152
По умолчанию

j:=(Random(79)+Random(21));
вот так вероятность мала но как бы её контролировать
jone вне форума Ответить с цитированием
Старый 04.04.2013, 15:55   #5
netpolice
Форумчанин
 
Аватар для netpolice
 
Регистрация: 14.02.2013
Сообщений: 222
По умолчанию

Код:
if (j>=80) and (j<=90) then
j:=(j-80)*2+80;
Как то вот так, но предупреждаю сразу, надо уходить от целочисленного RND;

Код:
if (j>=80) and (j<=90) then
j:=Random(20)+80;
А вот так веселее

и регулируем значение 90, где есть, где больше будет 100, вероятность увеличивается, где меньше 100 но стремиться к 80 уменьшается

т.е.
Код:
var
J,r:integer;
o:string;
begin
Randomize; Randomize; Randomize; Randomize;
r:=90;// меняем значение r меняется вероятность

j:=Random(r);

if (j>=80) and (j<=r) then
j:=Random(20)+80;


lbl1.Caption:=IntToStr(j);
end;

Последний раз редактировалось netpolice; 04.04.2013 в 16:01.
netpolice вне форума Ответить с цитированием
Старый 04.04.2013, 15:57   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Есть диапазон 1..100 -- Это random(100)
это уже неверно!
random(100) даёт числа от 0 до 99

Цитата:
Как увеличить, либо уменьшить вероятность выпадания скажем 80-100
Вероятность тоже в цифре 1-10 либо проценте
очевидно, что вероятность выпадения любой цифры равна 1/100
во сколько раз Вы хотите увеличить выпадение цифр от 80 до 100 ?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.04.2013, 16:05   #7
netpolice
Форумчанин
 
Аватар для netpolice
 
Регистрация: 14.02.2013
Сообщений: 222
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
это уже неверно!
random(100) даёт числа от 0 до 99
Это да! граничные положения 0 100 и 80 надо вылизывать, но уже не интересно, я свое решение предложил
netpolice вне форума Ответить с цитированием
Старый 04.04.2013, 16:40   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
  Randomize;
  n:=10;  //на [80,100] вероятность в 10 больше вероятности на [1,79]

  i:=Random(100+(n-1)*21)+1;
  if i>=80 then i:=80+((i-80) div n);
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.04.2013, 16:42   #9
jone
Форумчанин
 
Аватар для jone
 
Регистрация: 27.09.2008
Сообщений: 152
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
  Randomize;
  n:=10;  //на [80,100] вероятность в 10 больше вероятности на [1,79]

  i:=Random(100+(n-1)*21)+1;
  if i>=80 then i:=80+((i-80) div n);
таакс а уменьшить ? точно также

Последний раз редактировалось jone; 04.04.2013 в 16:47.
jone вне форума Ответить с цитированием
Старый 04.04.2013, 16:46   #10
netpolice
Форумчанин
 
Аватар для netpolice
 
Регистрация: 14.02.2013
Сообщений: 222
По умолчанию

Код:
var
J,r:integer;
o:string;
begin
Randomize; Randomize; Randomize; Randomize;
r:=82;// меняем значение r меняется вероятность

j:=Random(r);

if (j>=80)  then
j:=Random(20)+80;


lbl1.Caption:=IntToStr(j);
end;

К стати and (j<=r) действительно не нужен
netpolice вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Увеличить-уменьшить ячейку с рисунком Excel 2003 vfv Microsoft Office Excel 12 06.04.2016 11:35
Как увеличить CMaxExtPrecision? Или грохнуть WhiskasTM Общие вопросы Delphi 2 15.01.2013 06:43
Получение sig и rnd... FleXik Общие вопросы Delphi 2 14.01.2013 14:49
стрелки увеличить уменьшить число в ячейке AKolotushkin Microsoft Office Excel 3 11.06.2010 16:19