Текущий архив: 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.5 MB
Время: 0.032 c