Помогите с Rnd в VB6

Тема в разделе "Visual Basic", создана пользователем Hetman, 18 ноя 2004.

Статус темы:
Закрыта.
  1. Hetman

    Hetman Гость

    Проблема такова:
    генерю строку где каждый из 256 символов появляется по 16 раз т.е. в сумме 4096 символов.
    Для этого использую Rnd:
    Код (Text):
    ==
    Randomize
    str$=Chr(255*Rnd)
    ==
    но получается только 1700 символов сгенерить за 2-4 секунды, а потом стоп и больше ни][рена.
    пробывал сгенерить два HEX числа что бы составить символ, но так ещё меньше выходит = 1600.
    В чём трабл?
    вместо диапозона 0-255
    только 0-99 :)
     
  2. ????

    ???? Гость

    Hetman
    Код есть, хорошо... Но он же не полный..?
    ну 256 я вижу, а 16 где?
    у меня с твоим кодом получилось сгенерировать только 1 символ за (время не засекал), а потом ...
    А это как делал?
    Может глюк :)

    З.Ы. Я не VB'шник, но немного разбираюсь. Думал помочь, а не могу... надеюсь понятно.
     
  3. Hetman

    Hetman Гость

    Я писал с надеждой что кто-то сталкивался с проблемой посему даю код пополнее. Если есть идеии его упращения/улучшения милости - просим
    Код (Text):
    Do While Len(str) <= 4095
     tvalueA = Hex$(15 * Rnd)
     Randomize
     tvalueB = Hex$(15 * Rnd)
     
     tmp = Chr(Val(tvalueA & tvalueB))
     If Over(tmp) = False Then
      str = str & tmp
     End If
     DoEvents
    Loop
    функция Over
    Код (Text):
    pos = 1
    count = 1
     Do While Len(str) < 4096 '
      t = InStr(pos, str, sstr)
      If t = 0 Then '{1}>
        Exit Do
      Else
        If count > 15 Then '{2}>
         Over = True
         Exit Function
        Else
         count = count + 1
         pos = t + 1
        End If '<{2}
      End If '<{1}
      DoEvents
     Loop
    генерироване доходит до 39% т.е. 1600 символов и всё!
    после исследования сгенерированной последовательности выяснилось, что используються толко первая сотня символов (до &h63 включительно), а почему остальные не появляються?
     
  4. Hetman

    Hetman Гость

    все! нашел сам я код пределал так
    Код (Text):
    Do While Len(str) <= 4095
     Randomize
     value = CByte(255 * Rnd)
     If Over(str, value) = False Then
      str = str & Chr(value)
      'Command1.Caption = CInt(Len(str) / 4096 * 100) & "%"
     End If
     DoEvents
    Loop
    функция Over
    Код (Text):
    Function Over(sstr$, smb As Byte) As Boolean
    pos = 1
    count = 1
     Do While Len(str) < 4096 '
      t = InStr(pos, sstr, Chr(smb))
      If t = 0 Then '{1}>
        Exit Do
      Else
        If count > 15 Then '{2}>
         Over = True
         Exit Function
    '     tmp = Val(tmp) + 1
    '     pos = 1
        Else
         count = count + 1
         pos = t + 1
        End If '<{2}
      End If '<{1}
      DoEvents
     Loop
    End Function
    В предидущем коде трабл в том был что когда
    то все "левые" символы сводились к одному и томуже символу-квадрату,
    который уже был в последовательности, так что мне кажется тема исчерпана.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей