Differenze tra le versioni di "Rand ()"

Da Gambas-it.org - Wikipedia.
(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>&#091;[[#Note|Nota 1]]&#093;</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"</font> <FONT color=#B22222>'''Exec "rand"'''</font>
+
  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()":</font>   <SUP>&#091;[[Note|Nota 1]]&#093;</sup>
+
  ' ''Passiamo alla funzione "srand()" la sola parte frazionaria del valore ritornato dalla funzione nativa di Gambas "Timer()"''</font> <SUP>&#091;[[#Note|Nota 2]]&#093;</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.



Riferimenti