Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [VB5.0] Numeri in random che non si ripetono

    Salve!
    Perdonate il titolo chilometrico ma riassume lo scoglio dinanzi cui mi trovo: dovendo estrarre in random 20 numeri, qualcuno conosce il modo per non far ripetere in questa sequenza lo stesso numero?
    Personalmente ho provato con questo

    codice:
    Dim valore As Integer
    valore = Int((20 * Rnd) + 1)
    Randomize Timer
    Text1.Text = valore
    ma senza alcun risultato!

    Grazie per l'aiuto

  2. #2
    Utente di HTML.it L'avatar di Mabi
    Registrato dal
    May 2002
    Messaggi
    1,245
    Ciao.
    Io mi ero fatto una funzione apposta:
    codice:
    Private Function NumeroNonPresente(Vettore() As Integer, ByVal vMin As Integer, ByVal vMax As Integer) As Integer
    Dim Cont As Integer
    Dim Uguale As Boolean
    
    Do
      Uguale = False
      NumeroNonPresente = NumeroEstratto(vMin, vMax)
      For Cont = 0 To UBound(Vettore) - 1
        If NumeroNonPresente = Vettore(Cont) Then
          Uguale = True
          Exit For
        End If
      Next Cont
    Loop Until Uguale = False
    End Function
    
    Private Function NumeroEstratto(vMin As Integer, vMax As Integer) As Integer
    Randomize Timer
    NumeroEstratto = Int((vMax - vMin + 1) * Rnd + vMin)
    End Function
    La funzione permette l'estrazione di un numero casuale, compreso fra vMin e vMax passati come parametri, che non sia già presente fra quelli estratti in precedenza e salvati nell'array Vettore.
    Puoi quindi usarla in questo modo:
    codice:
    Dim Numeri() As Integer
    Dim Cont As Integer
    
    ReDim Numeri(19)
    
    For Cont = 0 To 19
      Numeri(Cont) = NumeroNonPresente(Numeri, 0, 19)
    Next Cont
    For Cont = 0 To 19
      MsgBox Numeri(Cont)
    Next Cont
    In questo caso estrai 20 numeri il cui valore rimane compreso fra 0 e 19
    ... e non usare while wend è una sintassi deprecata

  3. #3
    Innanzitutto grazie per la risposta

    Ho provato il codice che mi hai postato ma mi restituisce sempre 0 (zero) costingendomi a chiudere la msgbox per 19 volte!
    A cosa è dovuto?
    Grazie


  4. #4
    Utente bannato
    Registrato dal
    Mar 2005
    Messaggi
    136

    Find the difference

    codice:
    Dim valore As Integer
    Randomize Timer
    valore = Int((20 * Rnd) + 1)
    Text1.Text = valore


  5. #5
    Utente di HTML.it L'avatar di Mabi
    Registrato dal
    May 2002
    Messaggi
    1,245
    Originariamente inviato da skyhunter
    Innanzitutto grazie per la risposta

    Ho provato il codice che mi hai postato ma mi restituisce sempre 0 (zero) costingendomi a chiudere la msgbox per 19 volte!
    A cosa è dovuto?
    Grazie

    Ciao

    Non riesco ad immaginare il problema...
    Associando il codice ad un evento (Command1_Click()) ed incollando la procedura funziona:
    codice:
    Private Sub Command1_Click()
    Dim Numeri() As Integer
    Dim Cont As Integer
    
    ReDim Numeri(19)
    
    For Cont = 0 To 19
      Numeri(Cont) = NumeroNonPresente(Numeri, 0, 19)
    Next Cont
    For Cont = 0 To 19
      MsgBox Numeri(Cont)
    Next Cont
    End Sub
    
    Private Function NumeroNonPresente(Vettore() As Integer, ByVal vMin As Integer, ByVal vMax As Integer) As Integer
    Dim Cont As Integer
    Dim Uguale As Boolean
    
    Do
      Uguale = False
      NumeroNonPresente = NumeroEstratto(vMin, vMax)
      For Cont = 0 To UBound(Vettore) - 1
        If NumeroNonPresente = Vettore(Cont) Then
          Uguale = True
          Exit For
        End If
      Next Cont
    Loop Until Uguale = False
    End Function
    
    Private Function NumeroEstratto(vMin As Integer, vMax As Integer) As Integer
    Randomize Timer
    NumeroEstratto = Int((vMax - vMin + 1) * Rnd + vMin)
    End Function
    Prova semplicemente inserendo un pulsante sul form e come codice quello qui sopra.
    ... e non usare while wend è una sintassi deprecata

  6. #6

    Funziona!!! Grazie mille per la pazienza... ti sono debitore


  7. #7
    Utente di HTML.it L'avatar di Mabi
    Registrato dal
    May 2002
    Messaggi
    1,245
    Prego, mi basta sapere che ti sia servito.
    ... e non usare while wend è una sintassi deprecata

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.