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

Da Gambas-it.org - Wikipedia.
Versione del 21 giu 2024 alle 16:31 di Vuott (Discussione | contributi)

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

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