Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.5 MB
Время: 0.019 c
3-1085646446
AlexXn
2004-05-27 12:27
2004.06.20
BDE


14-1086023117
Knight
2004-05-31 21:05
2004.06.20
Почему в играх компьютерные напарники такие тупые?


6-1082979557
V@LER@N
2004-04-26 15:39
2004.06.20
Помогите с сокетом


3-1085577284
suharew
2004-05-26 17:14
2004.06.20
Что за файлы _QSQ1, _QSQ2


3-1085741047
avgur
2004-05-28 14:44
2004.06.20
Help my!!!!




   Наверх