USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  Numero aleatórios automático entre dois valores
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
Pontos: 2843 Pontos: 2843 Pontos: 2843
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
Pontos: 2843 Pontos: 2843 Pontos: 2843
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
Pontos: 2843 Pontos: 2843 Pontos: 2843
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
   
Página(s): 1/2      PRÓXIMA »


Seu Nome:

Seu eMail:

ALTERAR PARA MODO HTML
Mensagem:

[:)] = 
[:P] = 
[:(] = 
[;)] = 

HTML DESLIGADO

     
 VOLTAR

  



CyberWEB Network Ltda.    © Copyright 2000-2024   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página