Ferreira
|
JABOTICABAL SP - BRASIL
|
|
ENUNCIADA !
|
|
|
Postada em 21/09/2007 19:19 hs
Pessoal, estou utilizando a seguinte função para gerar numeros aleatórios: Public Function gCODAleatorio(Optional sDelimiter As String = ".", Optional nCasas As Integer = 1, Optional nFormatoCasas As Integer = 20) As String Dim i As Integer, e As String, cdo As Integer ReDim a(0 To nCasas) a: For i = 0 To nCasas - 1 Randomize a(i) = Int(Rnd * nFormatoCasas) e = IIf(i < nCasas - 1, e & a(i) & _ sDelimiter, e & a(i)) cdo = e Next gCODAleatorio = Trim$(e) End Function
Problemas: Como faço para que a função não repita um número gerado? Como faço para que a mesma função somente gere números entre 1 e 20 ? Obrigado pela atenção
Rodrigo Ferreira MSN - rjpferreira@hotmail.com
|
|
|
|
Tekki
|
UBERLÂNDIA MG - BRASIL
|
|
ENUNCIADA !
|
|
|
Postada em 21/09/2007 21:38 hs
Eu peguei o seu código e fiz uma pequena alteração... com este exemplo você pode fazer suas adaptações. Public Function gCODAleatorio(Optional sDelimiter As String = ".", Optional nCasas As Integer = 1, Optional nFormatoCasas As Integer = 20) As String Dim i As Integer, e As String, cdo As Integer ReDim a(0 To nCasas) a: i = 0 Do Randomize cdo = Int((Rnd(1) * 20) * nFormatoCasas) If InStr(1, e, cdo & sDelimiter) = 0 Then a(i) = cdo e = IIf(i < nCasas - 1, e & a(i) & sDelimiter, e & a(i)) i = i + 1 End If Loop Until (nCasas = i) MsgBox e gCODAleatorio = Trim$(e) End Function
|
|
|
Ferreira
|
JABOTICABAL SP - BRASIL
|
|
ENUNCIADA !
|
|
|
Postada em 21/09/2007 22:08 hs
Tekki, testei aqui mas não deu certo !!! Esse código tem que sotear aleatóriamente os vinte números, ex.: 9,18,5,20,4,16... até serem sorteados todos os números de 1 a 20, e se possível armazená-los em algum lugar, váriavel, txt ou outro meio ... Grato pela ajuda...
Rodrigo Ferreira MSN - rjpferreira@hotmail.com
|
|
|
Tekki
|
UBERLÂNDIA MG - BRASIL
|
|
ENUNCIADA !
|
|
|
Postada em 21/09/2007 23:11 hs
Veja se seria isto. Este código não ficou legal só quero saber se seria este o resultado que você deseja, com o parâmetro igual a 10 esta funcionando bem mas não mude o valor para 20 ou um número maior. Private Sub Command1_Click() Call gCODAleatorio(",", 10) End Sub Public Function gCODAleatorio(Optional sDelimiter As String = ".", Optional nCasas As Integer = 1) As String Dim i As Integer, e As String, cdo As Integer ReDim a(0 To nCasas) i = 0 Do Randomize cdo = Int(Rnd(1) * nCasas) If InStr(1, e, cdo & sDelimiter) = 0 Then a(i) = cdo e = IIf(i < nCasas - 1, e & a(i) & sDelimiter, e & a(i)) i = i + 1 End If Loop Until (nCasas = i) MsgBox e gCODAleatorio = Trim$(e) End Function
|
|
|
Ferreira
|
JABOTICABAL SP - BRASIL
|
|
ENUNCIADA !
|
|
|
Postada em 21/09/2007 23:59 hs
Tekki, praticamente sim, mas veja que saiu apenas 10 numeros e o numero ZERO ainda está entre eles, e como posso utilizar esses números gerados ? Se houver outra maneira de fazer o que preciso pode me falar, obrigado...
Rodrigo Ferreira MSN - rjpferreira@hotmail.com
|
TÓPICO EDITADO
|
|
|
|
Tekki
|
UBERLÂNDIA MG - BRASIL
|
|
ENUNCIADA !
|
|
|
Postada em 22/09/2007 16:23 hs
Vamos trabalhar com Array, veja iste... Option Explicit Public Sub Desordenar_array(ByRef vArray As Variant) Dim i As Long Dim iRndIndex As Integer Dim iTemp As Integer Dim iUBound As Integer iUBound = UBound(vArray) Randomize For i = 1 To iUBound iRndIndex = Int((iUBound) * Rnd()) iTemp = vArray(i) vArray(i) = vArray(iRndIndex + 1) vArray(iRndIndex + 1) = iTemp Next i End Sub Private Sub Command1_Click() Dim vArray() As Variant Dim sTemp As String Dim i As Integer ReDim vArray(1 To 20) For i = 1 To 20 vArray(i) = i Next Call Desordenar_array(vArray) For i = LBound(vArray) To UBound(vArray) sTemp = sTemp & vArray(i) & "," Next sTemp = Left(sTemp, Len(sTemp) - 1) MsgBox sTemp End Sub
|
|
|
|