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

  • Автор темы Hetman
  • Дата начала
Статус
Закрыто для дальнейших ответов.
H

Hetman

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

????

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

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

Hetman

#3
Я писал с надеждой что кто-то сталкивался с проблемой посему даю код пополнее. Если есть идеии его упращения/улучшения милости - просим
Код:
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
Код:
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 включительно), а почему остальные не появляються?
 
H

Hetman

#4
все! нашел сам я код пределал так
Код:
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
Код:
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
В предидущем коде трабл в том был что когда
tmp = Chr(Val(tvalueA & tvalueB)
то все "левые" символы сводились к одному и томуже символу-квадрату,
который уже был в последовательности, так что мне кажется тема исчерпана.
 
Статус
Закрыто для дальнейших ответов.