Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.20;
Скачать: CL | DM;

Вниз

Метод random   Найти похожие ветки 

 
Prog's Killer   (2004-06-08 10:48) [0]

Пример: number:=rаndom(4)

Мне нужно сделать так, чтобы генерировались числа все, кроме 1, т.е 0,2,3. Подскажите, plz


 
pasha_golub ©   (2004-06-08 10:49) [1]


a := random(4);
while a = 1 do a := random(4);
....


 
Anatoly Podgoretsky ©   (2004-06-08 10:57) [2]

Это изменяет распределение

case rаndom(3)
  0: number := 0;
  1: number := 2;
  2: number := 3;
end;

или

number := rаndom(3);
if number > 0 then number := number + 1;



 
Jeer ©   (2004-06-08 11:22) [3]

Для целочисленных x
x := 2 + round(random(Nmax-1));


 
SergP ©   (2004-06-08 11:28) [4]


>  [3] Jeer ©   (08.06.04 11:22)
> Для целочисленных x
> x := 2 + round(random(Nmax-1));


Дык человеку ноль тоже нужен...


 
Sur   (2004-06-08 11:30) [5]


> pasha_golub

Лучший ответ!!!


 
Digitman ©   (2004-06-08 11:33) [6]

const V: array[0..2] of Integer = (0, 2, 3);

ResultRandomValue := V[Random(SizeOf(V))];


 
Romkin ©   (2004-06-08 11:34) [7]

Anatoly Podgoretsky ©  (08.06.04 10:57) [2] Это НЕ изменяет распределение :))


 
english   (2004-06-08 11:35) [8]


> > pasha_golub
>
> Лучший ответ!!!

Нифига, он

> изменяет распределение

, кроме тго если нужно исключить много чисел, то плохой способ, тормозной, т.к. число итераций while теоретически не ограничено


 
V-Isa   (2004-06-08 12:09) [9]

number:=random(3)+1;
if number=1 then number:=0;


 
Romkin ©   (2004-06-08 12:20) [10]

english  (08.06.04 11:35) [8]
1. Генератор в Delphi достаточно хорош. И если у него просишь числа 0,1,2,3 то он распределяет их равномерно. Если 1 мы игнорируем, то как, ну как это скажется на вероятностях появления остальных цифр?!
2. "число итераций while теоретически не ограничено" чушь. Вероятность появления 1 равна 1/4, если мы исключаем 2 числа из десяти, то математическое ожидание исключений 1/5, дисперсию не посчитаю, увы. Но результат прост: исключения очень редки, а вероятность появления длинной последовательности исключаемых цифр пренебрежимо мала.


 
Romkin ©   (2004-06-08 12:31) [11]

V-Isa  (08.06.04 12:09) [9] А вот так - неверно. 0 будет появляться в два раза чаще, чем любая из других цифр!


 
Romkin ©   (2004-06-08 12:32) [12]

Ой, сорри, +1 не заметил :))


 
pasha_golub ©   (2004-06-08 13:14) [13]

Ну и развели. В таком свете, разрешите у автора вымогать постановку задачи в развернутом виде. А то чует моя ... что окажется все настолько прозаично, что слова "дисперсия", "распределение" и т.д., кажутся в данном контексте просто матом. ;-)


 
Prog's Killer   (2004-06-08 15:18) [14]

pasha_golub - вот лучший ответ! Спасибо!


 
pasha_golub ©   (2004-06-08 15:43) [15]

Я выиграл! ;0)))


 
begin...end ©   (2004-06-08 16:01) [16]


> pasha_golub


repeat
 A := Random(4)
until A <> 1

У меня красивее :)


 
Григорьев Антон   (2004-06-08 16:09) [17]


> pasha_golub - вот лучший ответ! Спасибо!


Да нет, не лучший. Там будет цикл, котоый снизит производительность. Проще так:

A:=random(3);
if A=1 then A:=3;


 
Weber ©   (2004-06-08 16:17) [18]


> Prog"s Killer   (08.06.04 15:18) [14]

Разуй глаза!
100 раз вызывать Random вместо 1, как например в [9].
Хотя ещё лучше:

function MyRandom(N: Integer): Integer;
begin
 Result := Random(N);
 if Result >= 1 then Inc(Result);
end;

Random вызовется 1 раз и выполнится код быстрее чем даже в [9].


 
Weber ©   (2004-06-08 16:21) [19]


> Anatoly Podgoretsky ©   (08.06.04 10:57) [2]

Уж больно громоздко! ;)

> english   (08.06.04 11:35) [8]

Распределение случайной величины по множеству будет таким же, хотя это - худший из вариантов! :)

> begin...end ©   (08.06.04 16:01) [16]

И ты туда же!!! 8(


 
begin...end ©   (2004-06-08 16:24) [20]


> [19] Weber ©   (08.06.04 16:21)


Не надо так нервничать, я не туда же, и не говорю, что это лучший способ.


 
Weber ©   (2004-06-08 16:25) [21]


> Random вызовется 1 раз и выполнится код быстрее чем даже
> в [9].

Нет, всё таки лучше [9], т.к. if выполнится только для одного числа!


 
pasha_golub ©   (2004-06-08 16:26) [22]

Weber ©   (08.06.04 16:21) [19]
Да, проще относись к жизни. :-)))


 
Weber ©   (2004-06-08 16:38) [23]


> pasha_golub ©   (08.06.04 16:26) [22]

function MyRandom(N: Integer): Integer;
begin
 Result := Random(N);
 if Result = 1 then
   Result := MyRandom(N);
end;
:))))


 
pasha_golub ©   (2004-06-08 16:40) [24]

Weber ©   (08.06.04 16:38) [23]
А вдруг опять еденица? :-)))


 
begin...end ©   (2004-06-08 16:43) [25]


> [24] pasha_golub ©   (08.06.04 16:40)
> А вдруг опять еденица? :-)))


Значит, не судьба :)


 
Weber ©   (2004-06-08 16:54) [26]


> pasha_golub ©   (08.06.04 16:40) [24]

Нужно прописать метод внутри формы
function TForm123.Random(N: Integer): Integer;
begin
 Result := 1;
end;



Страницы: 1 вся ветка

Текущий архив: 2004.06.20;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.038 c
14-1086086495
alless
2004-06-01 14:41
2004.06.20
Распозновать рукописный шрифт


6-1082969480
FireMan_Alexey
2004-04-26 12:51
2004.06.20
Вопрос по WSAWaitForMultipleEvents


1-1086450716
parovoZZ
2004-06-05 19:51
2004.06.20
Окно как в проводнике


1-1086682330
Sandman25
2004-06-08 12:12
2004.06.20
Goto оптимален?


10-1013415077
OLEGator
2002-02-11 11:11
2004.06.20
Провйдер не передает более 50-ти полей