Differenze tra le versioni di "Rand ()"
Riga 26: | Riga 26: | ||
<FONT Color=gray>' ''Alla funzione esterna "srand()" va passato un numero sempre diverso, per impostare il seme del successivo numero casuale.'' | <FONT Color=gray>' ''Alla funzione esterna "srand()" va passato un numero sempre diverso, per impostare il seme del successivo numero casuale.'' | ||
− | ' ''Passiamo alla funzione "srand()" la sola parte frazionaria del valore ritornato dalla funzione nativa di Gambas "Timer()":</font> | + | ' ''Passiamo alla funzione "srand()" la sola parte frazionaria del valore ritornato dalla funzione nativa di Gambas "Timer()":</font> <SUP>[[[Note|Nota 1]]]</sup> |
srand(Val(Scan(CStr(Timer), "*.*")[1])) | srand(Val(Scan(CStr(Timer), "*.*")[1])) | ||
Riga 36: | Riga 36: | ||
'''End''' | '''End''' | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | =Note= | ||
+ | [1] La funzione ''Timer( )'' restituisce il numero di secondi passati dall'inizio del programma. | ||
Versione delle 12:21, 18 mar 2017
La funzione esterna rand(), dichiarata nel file haeder "/usr/include/stdlib.h":
int rand (void)
ritorna un numero casuale intero incluso fra 0 e la costante RAND_MAX. Tale costante è dichiarata nel predetto file haeder /usr/include/stdlib.h e lì inizializzata con il valore "2147483647".
Affinché il risultato di tale funzione esterna non sia sempre il medesimo, è necessario cambiare il seme (seed) di partenza del generatore di numeri casuali, altrimenti esso parte sempre da zero. Il generatore di numeri casuali è rappresentato da un'altra funzione esterna: srand( ).
Volendo utilizzare in Gambas la funzione esterna rand( ), bisognerà dichiararla con Extern, nonché dichiarare la libreria di C, libc.so.6, nella quale la funzione è contenuta. Da sottolineare che, poiché la funzione esterna "rand( )" è omonima alla funzione di Gambas "Rand( )", bisognerà assegnarle un nome a piacere, ma si dovrà anche richiamare il suo vero nome con il comando Exec.
Dunque avremo ad esempio:
Private Extern rand_C() As Integer In "libc:6" Exec "rand"
Semplice esempio di uso in Gambas:
Library "libc:6" ' void srand (unsigned int __seed) ' Seed the random number generator with the given number. Private Extern srand(__seed As Integer) ' int rand (void) ' Return a random integer between 0 and RAND_MAX inclusive. Private Extern rand_C() As Integer Exec "rand" Public Sub Main() ' Alla funzione esterna "srand()" va passato un numero sempre diverso, per impostare il seme del successivo numero casuale. ' Passiamo alla funzione "srand()" la sola parte frazionaria del valore ritornato dalla funzione nativa di Gambas "Timer()": [Nota 1] srand(Val(Scan(CStr(Timer), "*.*")[1])) While True ' Il numero di zeri, presenti nel divisore, restituisce un valore composto da un pari numero di cifre: Print rand_C() % 100 Sleep 0.3 Wend End
Note
[1] La funzione Timer( ) restituisce il numero di secondi passati dall'inizio del programma.