Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    15

    come fare un random che pero....

    ...non ripeta lo stesso numero?
    es: io ho devo fare a = rnd*4 pero cosi puo darsi che in una text mi esce la sequenza 2 3 4 4 4 1 0 mentre io voglio che escono i numeri a caso ma senza ripetersi ad esempio 04 2 3 1 e quando ha fatto tutte le combinazioni e quindi ricomincia da capo allora puo ricominciare con un altro random sempre nello stesso modo. nn so se avete capito il mio italiano è deludente

  2. #2

    Re: come fare un random che pero....

    Originariamente inviato da gotta
    ...non ripeta lo stesso numero?
    es: io ho devo fare a = rnd*4 pero cosi puo darsi che in una text mi esce la sequenza 2 3 4 4 4 1 0 mentre io voglio che escono i numeri a caso ma senza ripetersi ad esempio 04 2 3 1 e quando ha fatto tutte le combinazioni e quindi ricomincia da capo allora puo ricominciare con un altro random sempre nello stesso modo. nn so se avete capito il mio italiano è deludente
    Ciao !

    Ci sono (almeno) due approcci per risolvere il problema:

    - per risolverlo in modo completo, informaticamente ineccepibile, si devono utilizzare complessi algoritmi di congruenza lineare (Mersenne Twister, ecc..)

    - per risolverlo "alla buona", puoi usare l'algoritmo del mazzo di carte: immaginando di dover generare numeri da 1 a N, metti in un array i numeri in ordine ( X(i)=i ), poi esegui un certo numero di "smazzate" (generi 2 numeri compresi tra 1 e N con il semplice (1+Int(Rnd*N)) e scambi i due numeri presenti in quelle due posizioni).
    Quando hai estratto tutti gli N numeri devi nuovamente mischiare il "mazzo" !

    ....Prova !
    IceCube_HT (VB6 fan Club)

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    15
    usando il secondo metodo nn è che potresti farmi un esempio scritto?perchè non ho capito bene

  4. #4
    Originariamente inviato da gotta
    usando il secondo metodo nn è che potresti farmi un esempio scritto?perchè non ho capito bene
    A pensarci bene, dovendo tener conto che finita la sequenza si deve ricominciare da capo, non era proprio semplicissimo, dovendo utilizzare variabili Static, ecc..

    Ti posto la mia versione:

    codice:
    Function Random() As Integer
       Const N As Integer = 4  'ultimo numero generabile, intervallo (0...N)
       Static X(0 To N) As Integer   'il vettore con i numeri casuali
       Static pr As Integer    'l'indice progressivo del numero da restituire
       Dim i As Integer, j As Integer, s As Integer, v As Integer
       
       If pr = 0 Then
          'e' la prima chiamata o abbiamo esaurito i numeri: inizializziamo!
          For i = 0 To N
             X(i) = i    'memorizziamo in X() i numeri, per ora in ordine...
          Next
          Randomize Timer
          For v = 1 To 3    'numero di "smazzate" per mischiare per bene
             For i = 0 To N  'il numero d'ordine i lo scambiamo...
                j = Int(Rnd * (N + 1)) ' con quello j, scelto a caso
                s = X(i)
                X(i) = X(j)
                X(j) = s
             Next              'per tutti i numeri nel "mazzo"
          Next                 'ripetiamo per il numero di "smazzate"
          'OK, ora i numeri sono in ordine "casuale"
          Random = X(0)   'restituiamo il primo della lista
          pr = 1               'l'indice del prossimo da restituire
       Else
          'ci sono ancora numeri disponibili, semplicemente restituiamo quello d'indice pr
          Random = X(pr)
          pr = pr + 1    'aggiorniamo l'indice
          If pr > N Then
             'se abbiamo restituito l'ultimo, resettiamo pr per la successiva re-inizializzazione
             pr = 0
          End If
       End If
    End Function
    Spero che possa servirti, ciao !!!
    IceCube_HT (VB6 fan Club)

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    15
    grazie ma se dopo io voglio applicare questa funzione a una list che contiene le parole ciao,cm,va e voglio fare in modo che a caso usando il tuo modo le riporta una ad una in una text devo scrivere
    Text1 = List1.List("" & N & "") ???? oppure come?

  6. #6
    Originariamente inviato da gotta
    grazie ma se dopo io voglio applicare questa funzione a una list che contiene le parole ciao,cm,va e voglio fare in modo che a caso usando il tuo modo le riporta una ad una in una text devo scrivere
    Text1 = List1.List("" & N & "") ???? oppure come?
    ...e vabbe', allora devo fare tutto io !

    Text1 = List1.List(Random)

    Ciao !
    IceCube_HT (VB6 fan Club)

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,459

    Moderazione

    Originariamente inviato da gotta
    ...non ripeta lo stesso numero?
    Di quale linguaggio stiamo parlando?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    15
    Originariamente inviato da icecube_HT
    ...e vabbe', allora devo fare tutto io !

    Text1 = List1.List(Random)

    Ciao !
    scusami nn avevo visto che si chiamava cosi cmq ora funziona tutto 1000 grazie

  9. #9
    Utente di HTML.it L'avatar di EngLab
    Registrato dal
    Jan 2006
    Messaggi
    496
    Scusate, forse ho capito male, ma la soluzione non potrebbe essere, banalmente, un semplice inserimento di
    codice:
    Randomize
    prima delle altre istruzioni?

  10. #10
    Originariamente inviato da EngLab
    Scusate, forse ho capito male, ma la soluzione non potrebbe essere, banalmente, un semplice inserimento di
    codice:
    Randomize
    prima delle altre istruzioni?
    No ! (scusa la sintesi)
    IceCube_HT (VB6 fan Club)

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.