Italian Randomize(Timer)

Lidia

Member
Nel buon vecchio VB6 esisteva l'istruzione in oggetto che inizializzava il generatore di numero casuali.
Qui viceversa l'istruzione rnd() ripete la stessa medesima sequenza di numeri, per quanto ne ho capito io.
Ad esempio il pulsante PulsanteCambia ogni volta che è premuto *non* cambia il numero di 5 cifre generato.
Come ovviare ?

B4X:
Sub PulsanteCambia_click
    Dim RndNum        As Int
    Dim i            As Int
    Dim S            As String
    For i=1 To 5
        RndNum=Rnd(0,9)
        S=RndNum
        Codice=Codice & S
    Next
    Codice=Codice.SubString2(0,5)
    Log(Codice)
End Sub
 

sirjo66

Well-Known Member
Licensed User
Longtime User
l'equivalente di Randomize(Timer) è
B4X:
RndSeed(DateTime.Now)

Edit: comunque il tuo codice è errato, dato che non azzeri mai la variabile "Codice" (almeno qui non si vede) e visto che poi i codici generati li accodi ma tieni sempre i primi 5 caratteri è normale che ti risulti sempre lo stesso codice

B4X:
Sub PulsanteCambia_click
    Dim i As Int
    Codice = ""
    For i = 1 To 5
        Codice = Codice & Rnd(0,9)
    Next
    Log(Codice)
End Sub
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Nel buon vecchio VB6 esisteva l'istruzione in oggetto che inizializzava il generatore di numero casuali.
Qui viceversa l'istruzione rnd() ripete la stessa medesima sequenza di numeri
Comunque è sbagliata anche l'idea della inizializzazione della funzione RND.

RndSeed non serve ad evitare che si ripetano dei numeri ma... esattamente il contrario; serve a far sì che ad ogni avvio del tuo software i numeri randomizzati siano proprio sempre gli stessi, o meglio, tu ottenga sempre la stessa serie.

Se la mia app esegue un ciclo ed estrae 5 numeri, senza usare RndSeed, ad ogni avvio la serie di 5 numeri sarà (quasi) sempre diversa; se utilizzo RndSeed(1), ad ogni avvio otterrò sempre la stessa serie di 5 numeri.

Questo serve per effettuale il debug del software (ecco perché non si dovrebbe usare RndSeed(DateTime.Now) ma un numero preciso, come parametro).
 

MarcoRome

Expert
Licensed User
Longtime User
Comunque è sbagliata anche l'idea della inizializzazione della funzione RND.

RndSeed non serve ad evitare che si ripetano dei numeri ma... esattamente il contrario; serve a far sì che ad ogni avvio del tuo software i numeri randomizzati siano proprio sempre gli stessi, o meglio, tu ottenga sempre la stessa serie.

Se la mia app esegue un ciclo ed estrae 5 numeri, senza usare RndSeed, ad ogni avvio la serie di 5 numeri sarà (quasi) sempre diversa; se utilizzo RndSeed(1), ad ogni avvio otterrò sempre la stessa serie di 5 numeri.

Questo serve per effettuale il debug del software (ecco perché non si dovrebbe usare RndSeed(DateTime.Now) ma un numero preciso, come parametro).

upload_2017-7-17_11-39-47.png
 

Star-Dust

Expert
Licensed User
Che vuol dire in italiano?
Hai mandato un immagine e Google Translate non me la traduce
 

sirjo66

Well-Known Member
Licensed User
Longtime User
RndSeed non serve ad evitare che si ripetano dei numeri ma... esattamente il contrario

Dipende da come chiami RndSeed
Se lo chiami con lo stesso numero è ovvio che ti genera gli stessi numeri random, ma se lo chiami con un numero che cambia sempre, come ad esempio DateTime.Now ti genererà sempre ogni volta numeri diversi

All'inizio dell'applicazione quindi chiami RndSeed(DateTime.Now) e poi sei a posto
 

LucaMs

Expert
Licensed User
Longtime User
Dipende da come chiami RndSeed
Se lo chiami con lo stesso numero è ovvio che ti genera gli stessi numeri random, ma se lo chiami con un numero che cambia sempre, come ad esempio DateTime.Now ti genererà sempre ogni volta numeri diversi
Non è necessario, nel secondo caso, si usa direttamente Rnd.
 

LucaMs

Expert
Licensed User
Longtime User
upload_2017-7-17_11-39-47-png.57738

Che vuol dire in italiano?
Hai mandato un immagine e Google Translate non me la traduce

Imposta il valore-seme del Random (casualità).
Questo metodo può essere usato per il debugging dato che ti consente di ottenere gli stessi risultati ogni volta.


Che poi è quello che avevo scritto io in italiano e, giustamente, Marco ha sintetizzato mostrando l'help in linea :)
 

Star-Dust

Expert
Licensed User
Traduzione

Imposta il valore del seme casuale
Questo metodo può essere utilizzato per il debugging in quanto ti permette di ottenere lo stesso risultato ogni volta
 

Star-Dust

Expert
Licensed User
Già me l'ero ricopiato a mano o_Oo_Oo_O
 

Star-Dust

Expert
Licensed User

Star-Dust

Expert
Licensed User
Tu hai mezzi moderni :p:p:p
 

LucaMs

Expert
Licensed User
Longtime User
Ho usato quel OCR Capture2Text per "prelevare" i nomi delle routine di un modulo di b4J (dopo averne fatto lo screen shot)


P.S. e dopo aver messo un Wish per poterli ottenere direttamente dall'IDE, qualche vita fà
 

sirjo66

Well-Known Member
Licensed User
Longtime User
altro errore che c'è nel codice di Lidia è che genera numeri da 0 a 8, mentre penso che lei voglia generare numeri da 0 a 9 e quindi dovrebbe scrivere
Rnd(0,10)
 

LucaMs

Expert
Licensed User
Longtime User
Grazie a tutti della pazienza.
Tutto molto chiaro.
Come.. "Grazie a tutti..."?

Va beh, sei nuova, non sai che qui è obbligatorio aggiungere dei Like alle risposte o, in alternativa, effettuare un bonifico di almeno 1.000€ per risposta!

:p
 
Top