none
Gerar sequência de números aleatórios sem repetições RRS feed

  • Pergunta

  • Boa noite pessoal!

    Estou tentando criar um sistema que gerar uma sequencia de números sem repetições na sequência. Exemplo: 01 05 06 05 10. Nesse caso o numero 05 repetiu duas vezes e é isso que estou tentando impedir, gostaria que não repetisse nenhum numero. Segue meu módulo do Microsoft Access. Help!!!!!

    Option Compare Database

    Function GerarSenha()
    On Error GoTo TratarErro
    Dim TamanhoSenha As Integer, Codigo As String, Novo As String

    '--------------------------------------
    'CRIA SENHA ALEATÓRIA
    '--------------------------------------

    Codigo = ""
    TamanhoSenha = Nz(Form_SenhaAleatoria.TamanhoSenha, 8)

    Dim Letra(26)

    Letra(0) = "01 "
    Letra(1) = "02 "
    Letra(2) = "03 "
    Letra(3) = "04 "
    Letra(4) = "05 "
    Letra(5) = "06 "
    Letra(6) = "07 "
    Letra(7) = "08 "
    Letra(8) = "09 "
    Letra(9) = "10 "
    Letra(10) = "11 "
    Letra(11) = "12 "
    Letra(12) = "13 "
    Letra(13) = "14 "
    Letra(14) = "15 "
    Letra(15) = "16 "
    Letra(16) = "17 "
    Letra(17) = "18 "
    Letra(18) = "19 "
    Letra(19) = "20 "
    Letra(20) = "21 "
    Letra(21) = "22 "
    Letra(22) = "23 "
    Letra(23) = "25 "
    Letra(24) = "26"
    Letra(25) = "27"

    Randomize

    Do While Len(Codigo) < TamanhoSenha
        Novo = Letra(Int(26 * Rnd))
        Codigo = Codigo & Novo
    Loop

    GerarSenha = Codigo

    SairFunction:
    Exit Function

    TratarErro:
    MsgBox "Ocorreu um erro ao processar o comando:" & Chr(13) & Err.Description, vbCritical, " Erro " & Err.Number
    Resume SairFunction

    End Function

    Desde já agradeço a ajuda!

    terça-feira, 23 de janeiro de 2018 02:55

Respostas

  • Para VB.Net creio estar respondido.

    Se foi útil, por gentileza, marque como útil/resposta.

    Para VBA, acredito ser melhor fazer a pergunta no tópico correto.


    MARIANO1776

    terça-feira, 23 de janeiro de 2018 20:27
  • Bom dia.

    Neste formulário, você escolhe o número mínimo o máximo e quantos deles você quer na se sequencia.

    Private Sub Bu_Gerar_Sequencia_Aleatoria_Click(sender As Object, e As System.EventArgs) Handles Bu_Gerar_Sequencia_Aleatoria.Click
    
     Números_Aleatórios()
    End Sub
    
    
     Private Sub Números_Aleatórios()
            ListBox_Resultado.Items.Clear()
    
            txt_limite_inferior.Text = "1"
            txt_limite_superior.Text = "50"
            txt_Qtd_Num_Sequencia.Text = "20"
    
    
            If txt_limite_inferior.Text.Trim = "" Then txt_limite_inferior.Text = "0"
            If txt_limite_superior.Text.Trim = "" Then txt_limite_superior.Text = "0"
            If txt_Qtd_Num_Sequencia.Text.Trim = "" Or txt_Qtd_Num_Sequencia.Text.Trim = "0" Then txt_Qtd_Num_Sequencia.Text = "1"
    
            Dim I, J, numero As Integer
            Dim limite_inferior As Integer = CInt(txt_limite_inferior.Text)
            Dim limite_superior As Integer = CInt(txt_limite_superior.Text)
            Dim qtd_sequencia As Integer = CInt(txt_Qtd_Num_Sequencia.Text)
            Dim matriz(CInt(txt_Qtd_Num_Sequencia.Text) - 1) As Int32
            Dim GeradorDeNumerosAleatorios As Random = New Random()
    
    
            For I = 0 To qtd_sequencia - 1 'preenche a sequencia aleatoriamente
    
                Do
                    numero = GeradorDeNumerosAleatorios.Next(limite_inferior, limite_superior + 1) 'seleciona um número obrigatório
                Loop While matriz.Contains(numero) 'verifica se o número não está na matriz para não haver duplicidade na escolha
    
                matriz(I) = numero
                ListBox_Resultado.Items.Add(matriz(I)) 'exibimos no listbox
            Next
    
    
            End Sub

    Se atendeu, por gentileza, marque como resposta/útli.


    MARIANO1776

    terça-feira, 23 de janeiro de 2018 09:13

Todas as Respostas

  • Bom dia.

    Veja esta thread recente.

    https://social.msdn.microsoft.com/Forums/pt-BR/d1f3c14b-b3c8-465a-9a72-e2dda611c9df/alguem-sabe-como-faz-pra-criar-uma-mensagem-box-que-coloca-resultados-aleatrios-?forum=vsvbasicpt

    ou esta em C#

    https://social.msdn.microsoft.com/Forums/pt-BR/14cad18f-cd3a-4415-a08c-fd3bf44714b3/gerar-nmeros-a-partir-de-um-conjunto-de-nmeros?forum=vscsharppt


    MARIANO1776

    terça-feira, 23 de janeiro de 2018 09:03
  • Bom dia.

    Neste formulário, você escolhe o número mínimo o máximo e quantos deles você quer na se sequencia.

    Private Sub Bu_Gerar_Sequencia_Aleatoria_Click(sender As Object, e As System.EventArgs) Handles Bu_Gerar_Sequencia_Aleatoria.Click
    
     Números_Aleatórios()
    End Sub
    
    
     Private Sub Números_Aleatórios()
            ListBox_Resultado.Items.Clear()
    
            txt_limite_inferior.Text = "1"
            txt_limite_superior.Text = "50"
            txt_Qtd_Num_Sequencia.Text = "20"
    
    
            If txt_limite_inferior.Text.Trim = "" Then txt_limite_inferior.Text = "0"
            If txt_limite_superior.Text.Trim = "" Then txt_limite_superior.Text = "0"
            If txt_Qtd_Num_Sequencia.Text.Trim = "" Or txt_Qtd_Num_Sequencia.Text.Trim = "0" Then txt_Qtd_Num_Sequencia.Text = "1"
    
            Dim I, J, numero As Integer
            Dim limite_inferior As Integer = CInt(txt_limite_inferior.Text)
            Dim limite_superior As Integer = CInt(txt_limite_superior.Text)
            Dim qtd_sequencia As Integer = CInt(txt_Qtd_Num_Sequencia.Text)
            Dim matriz(CInt(txt_Qtd_Num_Sequencia.Text) - 1) As Int32
            Dim GeradorDeNumerosAleatorios As Random = New Random()
    
    
            For I = 0 To qtd_sequencia - 1 'preenche a sequencia aleatoriamente
    
                Do
                    numero = GeradorDeNumerosAleatorios.Next(limite_inferior, limite_superior + 1) 'seleciona um número obrigatório
                Loop While matriz.Contains(numero) 'verifica se o número não está na matriz para não haver duplicidade na escolha
    
                matriz(I) = numero
                ListBox_Resultado.Items.Add(matriz(I)) 'exibimos no listbox
            Next
    
    
            End Sub

    Se atendeu, por gentileza, marque como resposta/útli.


    MARIANO1776

    terça-feira, 23 de janeiro de 2018 09:13
  • Se possível tem como implementar no código vba que coloquei abaixo? Estou utilizando o microsoft access.

    Option Compare Database

    Function GerarSenha()
    On Error GoTo TratarErro
    Dim TamanhoSenha As Integer, Codigo As String, Novo As String

    '--------------------------------------
    'CRIA SENHA ALEATÓRIA
    '--------------------------------------

    Codigo = ""
    TamanhoSenha = Nz(Form_SenhaAleatoria.TamanhoSenha, 8)

    Dim Letra(26)

    Letra(0) = "01 "
    Letra(1) = "02 "
    Letra(2) = "03 "
    Letra(3) = "04 "
    Letra(4) = "05 "
    Letra(5) = "06 "
    Letra(6) = "07 "
    Letra(7) = "08 "
    Letra(8) = "09 "
    Letra(9) = "10 "
    Letra(10) = "11 "
    Letra(11) = "12 "
    Letra(12) = "13 "
    Letra(13) = "14 "
    Letra(14) = "15 "
    Letra(15) = "16 "
    Letra(16) = "17 "
    Letra(17) = "18 "
    Letra(18) = "19 "
    Letra(19) = "20 "
    Letra(20) = "21 "
    Letra(21) = "22 "
    Letra(22) = "23 "
    Letra(23) = "25 "
    Letra(24) = "26 "
    Letra(25) = "27 "

    Randomize

    Do While Len(Codigo) < TamanhoSenha
        Novo = Letra(Int(26 * Rnd))
        Codigo = Codigo & Novo
    Loop

    GerarSenha = Codigo

    SairFunction:
    Exit Function

    TratarErro:
    MsgBox "Ocorreu um erro ao processar o comando:" & Chr(13) & Err.Description, vbCritical, " Erro " & Err.Number
    Resume SairFunction

    End Function
    • Editado DiogenesSousa terça-feira, 23 de janeiro de 2018 16:26
    terça-feira, 23 de janeiro de 2018 16:24
  • Para VB.Net creio estar respondido.

    Se foi útil, por gentileza, marque como útil/resposta.

    Para VBA, acredito ser melhor fazer a pergunta no tópico correto.


    MARIANO1776

    terça-feira, 23 de janeiro de 2018 20:27