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 9: Riga 9:
 
<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>
 
 
 
Semplice esempio di uso in Gambas:
 
Semplice esempio di uso in Gambas:
 
  Library "libc:6"
 
  Library "libc:6"
Riga 23: Riga 21:
 
   
 
   
 
   
 
   
  '''Public''' Sub Main()
+
  Public Sub Main()
 
    
 
    
 
  <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><FONT Color=gray>.</font>
+
  ' ''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]))
 
      
 
      
  While True
+
  Do
 
  <FONT Color=gray>' ''Il numero di zeri, presenti nel divisore, restituisce un valore composto da un pari numero di cifre:''</font>
 
  <FONT Color=gray>' ''Il numero di zeri, presenti nel divisore, restituisce un valore composto da un pari numero di cifre:''</font>
    Print <FONT color=#B22222>rand_C</font>() % 100
+
  Print <FONT color=#B22222>rand_C</font>() % 100
    Sleep 0.3
+
  Wait 0.3
  Wend
+
Loop
 
    
 
    
  '''End'''
+
  End
 
 
  
  
  
 
=Note=
 
=Note=
[1] La funzione ''Timer( )'' restituisce il numero di secondi passati dall'inizio del programma.
+
[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.
  
  

Versione attuale delle 15:02, 13 giu 2024

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]))
   
 Do
' Il numero di zeri, presenti nel divisore, restituisce un valore composto da un pari numero di cifre:
  Print rand_C() % 100
  Wait 0.3
Loop
  
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