Differenze tra le versioni di "Rand ()"
(2 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 1: | Riga 1: | ||
− | La funzione esterna '''rand()''', dichiarata nel file haeder "''/usr/include/stdlib.h''": | + | La funzione esterna '''rand()''', dichiarata nel file haeder "''/usr/include/stdlib.h''": <SUP>[[[#Note|Nota 1]]]</sup><FONT Color=gray>.</font> |
int rand (void) | 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". | 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". | ||
Riga 8: | Riga 8: | ||
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( )''" è <SPAN style="text-decoration:underline">omonima</span> alla funzione di Gambas "''Rand( )''", bisognerà assegnarle un nome a piacere, ma si dovrà anche richiamare il suo vero nome con il comando ''Exec''. | 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( )''" è <SPAN style="text-decoration:underline">omonima</span> alla funzione di Gambas "''Rand( )''", bisognerà assegnarle un nome a piacere, ma si dovrà anche richiamare il suo vero nome con il comando ''Exec''. | ||
<BR>Dunque avremo ad esempio: | <BR>Dunque avremo ad esempio: | ||
− | Private <FONT color=#B22222>Extern rand_C</font>() As Integer In "<FONT color=#B22222>libc:6 | + | Private <FONT color=#B22222>Extern rand_C</font>() As Integer In "<FONT color=#B22222>libc:6</font>" <FONT color=#B22222>'''Exec "rand"'''</font> |
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()" | + | ' ''Passiamo alla funzione "srand()" la sola parte frazionaria del valore ritornato dalla funzione nativa di Gambas "Timer()"''</font> <SUP>[[[#Note|Nota 2]]]</sup><FONT Color=gray>.</font> |
srand(Val(Scan(CStr(Timer), "*.*")[1])) | srand(Val(Scan(CStr(Timer), "*.*")[1])) | ||
Riga 41: | Riga 41: | ||
=Note= | =Note= | ||
− | [1] La funzione ''Timer( )'' restituisce il numero di secondi passati dall'inizio del programma. | + | [1] vedi anche la pagina della Wiki: [http://www.gambas-it.org/wiki/index.php?title=Generare_numeri_casuali_con_le_funzioni_esterne_srand()_e_rand()_di_stdlib.h Generare numeri casuali con le funzioni esterne srand() e rand() di stdlib.h] |
+ | |||
+ | [2] La funzione ''Timer( )'' restituisce il numero di secondi passati dall'inizio del programma. | ||
Versione delle 19:46, 18 mar 2017
La funzione esterna rand(), dichiarata nel file haeder "/usr/include/stdlib.h": [Nota 1].
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 2]. 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] vedi anche la pagina della Wiki: Generare numeri casuali con le funzioni esterne srand() e rand() di stdlib.h
[2] La funzione Timer( ) restituisce il numero di secondi passati dall'inizio del programma.