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

Вниз

Как задать диапазон для 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;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.028 c
14-1089241546
Almaz
2004-07-08 03:05
2004.07.25
IDE среды под QNX 6.x


4-1086605735
Andrew
2004-06-07 14:55
2004.07.25
Посылка сообщений...


1-1089264964
glGLU
2004-07-08 09:36
2004.07.25
Loading...


14-1088947184
Nick Denry
2004-07-04 17:19
2004.07.25
Электронные книги


4-1087154940
DjOne
2004-06-13 23:29
2004.07.25
Tabs