Differenze tra le versioni di "Generare numeri casuali con le funzioni esterne srand() e rand() di stdlib.h"

Da Gambas-it.org - Wikipedia.
 
(2 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Possiamo utilizzare le funzioni esterne ''srand( )'' e ''rand( )'', dichiarate nel file header "''/usr/include/stdlib.h''", per generare numeri casuali.
+
Possiamo utilizzare le funzioni esterne ''srand( )'' e ''rand( )'', dichiarate nel file header "''/usr/include/stdlib.h''", per generare numeri casuali. <SUP>&#091;[[#Note|Nota 1]]&#093;</sup>
  
La funzione esterna ''srand( )'' in particolare inizializza il generatore di numeri casuali utilizzato successivamente dalla funzione esterna ''rand( )''. Esso va inizializzato una volta soltanto e prima di usare la predetta funzione esterna ''rand( )''.
+
La funzione esterna ''srand( )'' in particolare inizializza il generatore di numeri casuali utilizzato successivamente dalla funzione esterna ''rand( )''. Esso va inizializzato una volta soltanto e prima di usare la predetta funzione esterna ''rand( )''. Ciò determina l'impostazione del seme (''seed'') per una sequenza di interi pseudo-casuali. La mancata impostazione del seme di partenza del generatore di numeri casuali mediante la funzione esterna ''srand( )'' causa il ripetersi del medesimo risultato.  
  
 
Va sottolineato che, avendo la funzione esterna ''rand( )'' un nome identificatore identico alla funzione ''Rand( )'' nativa di Gambas, nella sua dichiarazione con ''Extern'' si dovrà utilizzare un nome fittizio, e specificare poi con ''Exec'' il suo nome reale.
 
Va sottolineato che, avendo la funzione esterna ''rand( )'' un nome identificatore identico alla funzione ''Rand( )'' nativa di Gambas, nella sua dichiarazione con ''Extern'' si dovrà utilizzare un nome fittizio, e specificare poi con ''Exec'' il suo nome reale.
Riga 8: Riga 8:
 
Mostriamo un esempio pratico:
 
Mostriamo un esempio pratico:
 
  Library "libc:6"
 
  Library "libc:6"
 +
 +
<FONT Color=gray>' ''time_t time (time_t *__timer)''
 +
' ''Return the current time and put it in *TIMER if TIMER is not NULL.''</font>
 +
Private Extern time_C(__timer As Pointer) As Long Exec "time"
 
   
 
   
 
  <FONT Color=gray>' ''void srand (unsigned int __seed)''
 
  <FONT Color=gray>' ''void srand (unsigned int __seed)''
Riga 16: Riga 20:
 
  ' ''Return a random integer between 0 and RAND_MAX inclusive.''</font>
 
  ' ''Return a random integer between 0 and RAND_MAX inclusive.''</font>
 
  Private Extern rand_C() As Integer Exec "rand"
 
  Private Extern rand_C() As Integer Exec "rand"
 
<FONT Color=gray>' ''time_t time (time_t *__timer)''
 
' ''Return the current time and put it in *TIMER if TIMER is not NULL.''</font>
 
Private Extern time_C(__timer As Pointer) As Long Exec "time"
 
 
   
 
   
 
   
 
   
Riga 27: Riga 27:
 
    
 
    
 
  <FONT Color=gray>' ''Inizializza il generatore di numeri casuali:''</font>
 
  <FONT Color=gray>' ''Inizializza il generatore di numeri casuali:''</font>
   srand(time_C(0))
+
   srand(CInt(time_C(0)))
 
    
 
    
  <FONT Color=gray>' ''Stampa 10 numeri compresi fra '''0''' e '''99''':''</font>
+
  <FONT Color=gray>' ''Stampa 10 numeri compresi fra '''1''' e '''100''':''</font>
 
   For b = 1 To 10
 
   For b = 1 To 10
     Print rand_C() Mod 100
+
     Print rand_C() Mod 100 + 1
 
   Next
 
   Next
 
    
 
    
 
  '''End'''
 
  '''End'''
 +
 +
 +
 +
 +
=Note=
 +
[1] Vedi anche la pagina della Wiki: [http://www.gambas-it.org/wiki/index.php?title=Rand_() rand()]
  
  

Versione attuale delle 10:02, 7 mar 2018

Possiamo utilizzare le funzioni esterne srand( ) e rand( ), dichiarate nel file header "/usr/include/stdlib.h", per generare numeri casuali. [Nota 1]

La funzione esterna srand( ) in particolare inizializza il generatore di numeri casuali utilizzato successivamente dalla funzione esterna rand( ). Esso va inizializzato una volta soltanto e prima di usare la predetta funzione esterna rand( ). Ciò determina l'impostazione del seme (seed) per una sequenza di interi pseudo-casuali. La mancata impostazione del seme di partenza del generatore di numeri casuali mediante la funzione esterna srand( ) causa il ripetersi del medesimo risultato.

Va sottolineato che, avendo la funzione esterna rand( ) un nome identificatore identico alla funzione Rand( ) nativa di Gambas, nella sua dichiarazione con Extern si dovrà utilizzare un nome fittizio, e specificare poi con Exec il suo nome reale.


Mostriamo un esempio pratico:

Library "libc:6"

' time_t time (time_t *__timer)
' Return the current time and put it in *TIMER if TIMER is not NULL.
Private Extern time_C(__timer As Pointer) As Long Exec "time"

' 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()
 
 Dim b As Byte
 
' Inizializza il generatore di numeri casuali:
  srand(CInt(time_C(0)))
  
' Stampa 10 numeri compresi fra 1 e 100:
  For b = 1 To 10
    Print rand_C() Mod 100 + 1
  Next
  
End



Note

[1] Vedi anche la pagina della Wiki: rand()



Riferimenti