Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.293 c
14-1088757616
Cosinus
2004-07-02 12:40
2004.07.25
Склероз - болезнь молодежи!


14-1088699132
Art_Z
2004-07-01 20:25
2004.07.25
Хочу Partition Magic!!!


1-1089543562
ltexcimer
2004-07-11 14:59
2004.07.25
максимальный размер переменной и запись в файл


14-1088803935
saNat
2004-07-03 01:32
2004.07.25
Книга по 3D MAX


9-1080408372
AbLaZe
2004-03-27 20:26
2004.07.25
Прорисовка карты





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский