Случайные числа

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Случайные числа

Сообщение Sun07 » 21.10.2006 (Сб) 21:55

Подскажите, пожалуйста, как в определённый момент времени получить 30 случайных байт (не псевдослучайных)? Есть идея взять их из определённого участка памяти, но как и из какого участка?

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 21.10.2006 (Сб) 22:12

Подскажите, пожалуйста, как в определённый момент времени получить 30 случайных байт (не псевдослучайных)? Есть идея взять их из определённого участка памяти, но как и из какого участка?
Гхм. Если ты думаешь, что "случайное" число взятое по твоему алгоритму более случайно, чем вщятое, скажем, по алгоритму VB то ты сильно заблуждаешься
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

|( () ( T |/| |(
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 211
Зарегистрирован: 01.10.2005 (Сб) 15:49

Сообщение |( () ( T |/| |( » 21.10.2006 (Сб) 22:48

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Sub Form_Load()
Dim b(29) As Byte
CopyMemory b(0), GetDC(Me.hwnd) , 30
End Sub

Подойдёт???)

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 21.10.2006 (Сб) 23:10

ANDLL, смотря из какого участка памяти брать, в этом и вопрос. Но явно не постоянный код программы :)

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 21.10.2006 (Сб) 23:12

Sun07
И что, правда думаешь, что сложная функция времени более предсказуема чем содержимое заданной области памяти?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

|( () ( T |/| |(
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 211
Зарегистрирован: 01.10.2005 (Сб) 15:49

Сообщение |( () ( T |/| |( » 21.10.2006 (Сб) 23:21

->Но явно не постоянный код программы

CopyMemory b(0), GetDC(Me.hwnd) , 30
Выдаёт вполне случайный массив, каждый раз разный.

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 22.10.2006 (Вс) 0:09

ANDLL писал(а):Sun07
сложная функция времени?
Если ты имел ввиду случайное от времени, то там можно взять только миллисекунды, что будет вроде только 4 байта, а генерить от них псевдопоследовательность мне не подходит.

|( () ( T |/| |( писал(а):Sun07
CopyMemory b(0), GetDC(Me.hwnd) , 30

Объясни новичку, что сей код делает

|( () ( T |/| |(
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 211
Зарегистрирован: 01.10.2005 (Сб) 15:49

Сообщение |( () ( T |/| |( » 22.10.2006 (Вс) 0:20

Sun07, CopyMemory копирует в массив b участок памяти длинной 30байт, начиная с GetDC(Me.hwnd). что такое GetDC - точно не скажу, но возращяет указатель.

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 22.10.2006 (Вс) 0:41

|( () ( T |/| |( писал(а):Sun07, CopyMemory копирует в массив b участок памяти длинной 30байт, начиная с GetDC(Me.hwnd). что такое GetDC - точно не скажу, но возращяет указатель.

Так это, наверное, указатель на загруженный код моей программы или на ёё область данных :) Где ты это взял, если не знаешь до конца?

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 22.10.2006 (Вс) 0:44

lol

The GetDC function retrieves a handle to a display device context (DC) for the client area of a specified window or for the entire screen. You can use the returned handle in subsequent GDI functions to draw in the DC.


Т.е. GetDC(Me.hWnd) = Me.hDC
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 22.10.2006 (Вс) 0:46

Господа, прекращаем маятся дурью. Rnd даст вам гораздо более случайные числа, чем ваш убогий способ.

А вот ваш убогий способ скорее всего вернёт вам нечто неслучайное. И я даже предположу, что 70% сгенерированных таким способом чисел будут либо 0 либо 255 (не проверял, когда писал, проверил - так и есть).

Поэтому если уж вам хочется чего то Extra - измеряйте обороты куллера что-ли :lol:
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

|( () ( T |/| |(
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 211
Зарегистрирован: 01.10.2005 (Сб) 15:49

Сообщение |( () ( T |/| |( » 22.10.2006 (Вс) 1:20

Таким способом можно получить что-то случайное, если опиративу забить по максимуму (7zip очень хорошо это делает))) Но эффективнее конечно
Randomize(timer)
for i=0 to 29
b(i)=Cint(255*rnd)
next

Ну или свою какю функцию написать: 1/(1+Abs(cos(timer)+sin(-sqr(timer+1)))), или в этом роде

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 22.10.2006 (Вс) 1:33

А что если выполнить
Код: Выделить всё
1/(1+Abs(cos(timer)+sin(-sqr(timer+1))))

30 раз мы получим каждый раз разные числа?

И потом, случайные числа будут повторяться, если функция будет вызвана в одно и тоже время.

Вобщем, народ, в лице Sun07 и |( () ( T |/| |(:
Прекращаем маяться дурью и дружно юзаем RND
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

|( () ( T |/| |(
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 211
Зарегистрирован: 01.10.2005 (Сб) 15:49

Сообщение |( () ( T |/| |( » 22.10.2006 (Вс) 1:45

Хакер. заместо timer поставить n, и потом прибовлять к нему по 0,5.

->Прекращаем маяться дурью.
А кто маиться. был задан вопрос, я ответил.
Это веть ты начал парня критиковать, может ему подходит "что 70% сгенерированных таким способом чисел будут либо 0 либо 255":)


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 74

    TopList