Random

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
Создатель
Постоялец
Постоялец
 
Сообщения: 422
Зарегистрирован: 21.04.2004 (Ср) 3:32
Откуда: Новосибирск

Random

Сообщение Создатель » 31.03.2005 (Чт) 7:32

Я тут наткнулся на статью - http://www.lwteam.ru/modules/news/artic ... oryid=1139

Стало вдруг жутко интересно, каким образом можно реализовать подобную вещь на vb .net ...Автор описывает функцию randomize для delphi , а возможно ли найти, как эта функция выглядит в vb .net ...что нить типа как будет выглядеть функция random.next(3)
Последний раз редактировалось Создатель 31.03.2005 (Чт) 9:21, всего редактировалось 1 раз.

Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Сообщение Faust » 31.03.2005 (Чт) 8:40

В VB6 был унаследованный со времен gwbasic'a оператор Randomize, которому по дефолту передавалось значение Timer, хотя можно было задать операнд руками. Надеюсь, эту традицию в VB.NET не нарушили.
Листинги не горят!

Создатель
Постоялец
Постоялец
 
Сообщения: 422
Зарегистрирован: 21.04.2004 (Ср) 3:32
Откуда: Новосибирск

Сообщение Создатель » 31.03.2005 (Чт) 9:18

Дело в том, что в vb .net появился(насколько я знаю, т.к. в других версиях языка практически не работал) класс random....Есть функция NEXT , которая возвращает сгенерированное число....В MSDN говорят, что это число зависит от сист. времени. Поэтому я хочу найти, как выглядит эта функция, чтобы знать, какое число сгенерится допустим завтра в 16,00 естественно в определенную миллисекунду

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 31.03.2005 (Чт) 15:08

Вот он.
Если нужен стойкий рандом, используйте криптографические службы

Код: Выделить всё
<Serializable> _
Public Class Random
      ' Methods
      Public Sub New()
      Public Sub New(ByVal Seed As Integer)
      Private Function GetSampleForLargeRange() As Double
      Private Function InternalSample() As Integer
      Public Overridable Function [Next]() As Integer
      Public Overridable Function [Next](ByVal maxValue As Integer) As Integer
      Public Overridable Function [Next](ByVal minValue As Integer, ByVal maxValue As Integer) As Integer
      Public Overridable Sub NextBytes(ByVal buffer As Byte())
      Public Overridable Function NextDouble() As Double
      Protected Overridable Function Sample() As Double

      ' Fields
      Private inext As Integer
      Private inextp As Integer
      Private Const MBIG As Integer = 2147483647
      Private Const MSEED As Integer = 161803398
      Private Const MZ As Integer = 0
      Private SeedArray As Integer()


Public Sub New() : Me.New(Environment.TickCount)
End Sub

 
Public Sub New(ByVal Seed As Integer)
      Me.SeedArray = New Integer(56  - 1) {}
      Dim num2 As Integer = (161803398 - Math.Abs(Seed))
      Me.SeedArray(55) = num2
      Dim num3 As Integer = 1
      Dim num4 As Integer
      For num4 = 1 To 55 - 1
            Dim num1 As Integer = ((21 * num4) Mod 55)
            Me.SeedArray(num1) = num3
            num3 = (num2 - num3)
            If (num3 < 0) Then
                  num3 = (num3 + 2147483647)
            End If
            num2 = Me.SeedArray(num1)
      Next num4
      Dim num5 As Integer
      For num5 = 1 To 5 - 1
            Dim num6 As Integer
            For num6 = 1 To 56 - 1
                  Me.SeedArray(num6) = (Me.SeedArray(num6) - Me.SeedArray((1 + ((num6 + 30) Mod 55))))
                  If (Me.SeedArray(num6) < 0) Then
                        Me.SeedArray(num6) = (Me.SeedArray(num6) + 2147483647)
                  End If
            Next num6
      Next num5
      Me.inext = 0
      Me.inextp = 21
      Seed = 1
End Sub


Private Function InternalSample() As Integer
      Dim num2 As Integer = Me.inext
      Dim num3 As Integer = Me.inextp
      If (++num2 >= 56) Then
            num2 = 1
      End If
      If (++num3 >= 56) Then
            num3 = 1
      End If
      Dim num1 As Integer = (Me.SeedArray(num2) - Me.SeedArray(num3))
      If (num1 < 0) Then
            num1 = (num1 + 2147483647)
      End If
      Me.SeedArray(num2) = num1
      Me.inext = num2
      Me.inextp = num3
      Return num1
End Function


Private Function GetSampleForLargeRange() As Double
      Dim num1 As Integer = Me.InternalSample
      If (((Me.InternalSample Mod 2) = 0) OrElse False) Then
            num1 = -num1
      End If
      Dim num2 As Double = num1
      num2 = (num2 + 2147483646)
      Return (num2 / 4294967293)
End Function


Private Function InternalSample() As Integer
      Dim num2 As Integer = Me.inext
      Dim num3 As Integer = Me.inextp
      If (++num2 >= 56) Then
            num2 = 1
      End If
      If (++num3 >= 56) Then
            num3 = 1
      End If
      Dim num1 As Integer = (Me.SeedArray(num2) - Me.SeedArray(num3))
      If (num1 < 0) Then
            num1 = (num1 + 2147483647)
      End If
      Me.SeedArray(num2) = num1
      Me.inext = num2
      Me.inextp = num3
      Return num1
End Function

Public Overridable Function [Next]() As Integer
      Return Me.InternalSample
End Function

Public Overridable Function [Next](ByVal maxValue As Integer) As Integer
      If (maxValue < 0) Then
            Throw New ArgumentOutOfRangeException("maxValue", String.Format(Environment.GetResourceString("ArgumentOutOfRange_MustBePositive"), "maxValue"))
      End If
      Return CType((Me.Sample * maxValue),Integer)
End Function

Public Overridable Function [Next](ByVal minValue As Integer, ByVal maxValue As Integer) As Integer
      If (minValue > maxValue) Then
            Throw New ArgumentOutOfRangeException("minValue", String.Format(Environment.GetResourceString("Argument_MinMaxValue"), "minValue", "maxValue"))
      End If
      Dim num1 As Long = (maxValue - minValue)
      If (num1 <= 2147483647) Then
            Return (CType((Me.Sample * num1),Integer) + minValue)
      End If
      Return (CType(CType((Me.GetSampleForLargeRange * num1),Long),Integer) + minValue)
End Function

Public Overridable Sub NextBytes(ByVal buffer As Byte())
      If (buffer Is Nothing) Then
            Throw New ArgumentNullException("buffer")
      End If
      Dim num1 As Integer
      For num1 = 0 To buffer.Length - 1
            buffer(num1) = CType((Me.InternalSample Mod 256),Byte)
      Next num1
End Sub

Public Overridable Function NextDouble() As Double
      Return Me.Sample
End Function

Protected Overridable Function Sample() As Double
      Return (Me.InternalSample * 4.6566128752457969E-10)
End Function

End Class
[/code]
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Создатель
Постоялец
Постоялец
 
Сообщения: 422
Зарегистрирован: 21.04.2004 (Ср) 3:32
Откуда: Новосибирск

Сообщение Создатель » 31.03.2005 (Чт) 15:27

Sebas
Ух ты!!!!! Классно......а не подскажешь, где все это взял???

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 31.03.2005 (Чт) 18:39

ildasm + декомпилятор, наверное :)
Моду создают модоки, а распространяют модозвоны.

Создатель
Постоялец
Постоялец
 
Сообщения: 422
Зарегистрирован: 21.04.2004 (Ср) 3:32
Откуда: Новосибирск

Сообщение Создатель » 01.04.2005 (Пт) 17:44

Эх мне бы точный алгоритм и хоть названия необходимых прог, я бы наверное, пол frameworka перекопал.. :lol:

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 01.04.2005 (Пт) 19:04

Создатель писал(а):Эх мне бы точный алгоритм и хоть названия необходимых прог, я бы наверное, пол frameworka перекопал.. :lol:


Ничё интереснго
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Создатель
Постоялец
Постоялец
 
Сообщения: 422
Зарегистрирован: 21.04.2004 (Ср) 3:32
Откуда: Новосибирск

Сообщение Создатель » 02.04.2005 (Сб) 3:41

Ничё интереснго

Так значит не хочешь говорить, каким образом это сделал??? :(


Вернуться в Народный треп

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

Сейчас этот форум просматривают: SemrushBot и гости: 112

    TopList  
cron