Форум: "Основная";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];
ВнизКак задать диапазон для Random? Найти похожие ветки
← →
Zvr@b (2004-07-08 02:14) [0]Как задать диапазон чисел для функции Random? Т.е. мне нужно не от 0 до N, а например от 1 до N
← →
KilkennyCat © (2004-07-08 02:17) [1]Это очень просто: сместить диапазон в меньшую сторону (в данном случае на единицу), а к результату это смещение прибавить.
← →
Zvr@b (2004-07-08 02:25) [2]А можно пример привести?
← →
Palladin © (2004-07-08 02:28) [3]Может тебе еще пример сложения двух целочисленных чисел привести? А то действительно... как то непонятно написано... сложить два числа... черт его знает что под этим скрывается...
← →
KilkennyCat © (2004-07-08 02:30) [4]мда... ладно, попробую по-другому:
Это очень просто: уменьшить значение диапазона (в данном случае на единицу), а результат увеличить. Это и будет называться смещением диапазона.
---------------------------------
Объяснение = помощь. Код = $
← →
Zvr@b (2004-07-08 02:33) [5]Я вообщето только начинаю программировать, по крайней мере учусь... И слова "а к результату это смещение прибавить.
" не совсем допонимаю! Не ужели так сложно пример привести?
← →
Alex_Rom (2004-07-08 02:33) [6]Можно так
a:=Random(N)+1
+1 - обеспечивает минимальное значение.
Random(N) - к минимальному значению прибавляет случайное сило в диапазоне [0,N-1].
В итоге имеем число в пределах [1,N].
← →
KilkennyCat © (2004-07-08 02:35) [7]
> Zvr@b (08.07.04 02:33) [5]
Нет, пример привести даже проще и быстрее. Но смысл? В результате объяснения, даже если неверного, есть шанс, что Вы увидите ход рассуждения и научитесь мыслить самостоятельно. В случае кода, есть шанс, что Вы зашаблонитесь. А в данном случае уровень программирования вообще не имеет значения - чистая математика.
← →
KilkennyCat © (2004-07-08 02:36) [8]
> Alex_Rom (08.07.04 02:33) [6]
Неверно.
← →
Alex_Rom (2004-07-08 02:38) [9]>KilkennyCat ©
Why? :|
← →
Zvr@b (2004-07-08 02:39) [10]Ладно ребята... не горячитесь! Видимо я ещё не дорос для того чтобы понять вас так просто на словах... Мне действительно без примера непонятно!
Если вас это напрягает ... незачем вообще отвечать!
Это я не в укор, но меня тоже можно понять!
← →
Zvr@b (2004-07-08 02:39) [11].... ответ последний.... устарел!
← →
Zvr@b (2004-07-08 02:43) [12]....и ещё : перенос строки в Memo это символ - #13 нужно добавить или нет?
← →
KilkennyCat © (2004-07-08 02:45) [13]
> Alex_Rom (08.07.04 02:38) [9]
еслиa:=Random(N)+1
то
+1 - обеспечивает минимальное значение. верно
Random(N) - к минимальному значению прибавляет случайное сило в диапазоне [0,N-1]. неверно
В итоге имеем число в пределах [1,N]. неверно
будет так:
Random(N) - к минимальному значению прибавляет случайное сило в диапазоне [0,N].
В итоге имеем число в пределах [1,N + 1].
← →
Palladin © (2004-07-08 02:48) [14]
> Zvr@b (08.07.04 02:43)
Вообще то TMemo.Lines:TStrings
← →
Alex_Rom (2004-07-08 02:49) [15]
> KilkennyCat © (08.07.04 02:45) [13]
Random(N) - к минимальному значению прибавляет случайное сило в диапазоне [0,N].
В итоге имеем число в пределах [1,N + 1]. - Конечно нет.
Возьми напиши в Паскале прогу :
for i:=1 to 50 do writeln(random(1)) И ты не получишь ни одной единицы!
Результатом работы функции random(n) есть число в пределах [0, n-1] !
← →
Zvr@b (2004-07-08 02:49) [16]Как я понял:
n:=n-1;
a:=Random(n)+1;
Да или нет?
← →
KilkennyCat © (2004-07-08 02:51) [17]> Alex_Rom
Стоп, прошу прощения. Если квадратные скобки читать как включительно то верно.
← →
KilkennyCat © (2004-07-08 02:53) [18]
> Alex_Rom (08.07.04 02:49) [15]
Да, старею... Еще раз приношу извинения.
← →
Alex_Rom (2004-07-08 02:53) [19]
> Zvr@b (08.07.04 02:49) [16]
> Как я понял:
> n:=n-1;
> a:=Random(n)+1;
>
> Да или нет?
Нет.
Если ты хочешь получить результат в пределах [1,N], то просто пишешь как я написал сначала:
a:=Random(n)+1
← →
Alex_Rom (2004-07-08 02:54) [20]
> KilkennyCat © (08.07.04 02:53) [18]
> Да, старею... Еще раз приношу извинения.
Вот, вот.... :)
← →
KilkennyCat © (2004-07-08 02:56) [21]
> Alex_Rom (08.07.04 02:54) [20]
Во всем виноват Борланд :) Левую границу включили, а правую не стали :) Блин, из-за таких мелочей потом баги месяц ловишь...
← →
Alex_Rom (2004-07-08 02:58) [22]
> KilkennyCat © (08.07.04 02:56) [21]
Согласен. У меня такое тоже случалось.. :)
← →
Zvr@b (2004-07-08 03:01) [23]Вот видете какой вопрос я задал! )))
← →
Alex_Rom (2004-07-08 03:03) [24]
> Zvr@b (08.07.04 03:01) [23]
ДА, трафик неплохо поднял :)
Ну, я так полагаю, что теперь вопрос исчерпан, а тема закрыта.
← →
КаПиБаРа © (2004-07-08 08:27) [25]
> Результатом работы функции random(n) есть число в пределах
> [0, n-1] !
Не совсем верно.
Random returns a random number within the range 0 <= X < Range
← →
ssk © (2004-07-08 10:11) [26]по сабжу
uses Math;
RandomRange()
← →
TopT (2004-07-08 10:35) [27]КаПиБаРа, что же не верно? В приведенной вами цитате из хелпа написано "X < Range" не меньше равно, а именно меньше. Речь идет о целых числах и соответственно максимальное значение Х это Range-1
← →
КаПиБаРа © (2004-07-08 10:59) [28]Ну если речь идет о целых числах то все в порядке.
Хотя определение из хелп справедливо для любых чисел.
← →
Anatoly Podgoretsky © (2004-07-08 11:16) [29]Для целых чисел лучше подходить с такой позиции - N это количество чисел в интревале. Интервал начинается с нуля.
Реальная формула такова Random(N) + Offset
Смещение 9 естественно в записи опускается.
Это как на линейке, 10 сантиметров всегда 10 сантиметров, независимо от начальной точке на этой линейке.
← →
Глеб © (2004-07-08 11:32) [30]
> Как задать диапазон чисел для функции Random? Т.е. мне нужно
> не от 0 до N, а например от 1 до N
От 1 до N - x := random(n) + 1;
От 2 до N - x := random(n-1) + 2; ИМХО
← →
КаПиБаРа © (2004-07-08 12:53) [31]
> От 2 до N - x := random(n-1) + 2; ИМХО
неа
← →
Программатор © (2004-07-08 13:06) [32]x := random(n-1) + 1
← →
MBo © (2004-07-08 13:13) [33]Кошмар...
← →
BillyJeans (2004-07-08 13:19) [34]От 2 до N - x := random(N-2) + 2; !!!
← →
han_malign © (2004-07-08 13:44) [35]
procedure _RandInt;
asm
{ ->EAX Range }
{ <-EAX Result }
PUSH EBX
{$IFDEF PIC}
PUSH EAX
CALL GetGOT
MOV EBX,EAX
POP EAX
MOV ECX,[EBX].OFFSET RandSeed
IMUL EDX,[ECX],08088405H
INC EDX
MOV [ECX],EDX
{$ELSE}
XOR EBX, EBX
IMUL EDX,[EBX].RandSeed,08088405H
INC EDX
MOV [EBX].RandSeed,EDX
{$ENDIF}
MUL EDX
MOV EAX,EDX
POP EBX
end;
- Max(Random(N))=N*$FFFFFFFF shr 32{div $100000000}<N
//Random(N1..N2)=Random(N2-N1+1)+N1
можно Trunc(Random*(N2-N1+1))+N1 или Round(Random*(N2-N1))+N1, но тогда N2, теоретически, может выпадать с незначительно меньшей вероятностью, так как для дискретных вещественных чисел теорема о полноте континиума не вполняется - хотя это нужно прикинуть поточнее...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.04 c