Visita Orebla.it su Facebook Segui Orebla.it su Twitter Vedi i video su YouTube di Orebla.it Unisciti alle cerchie di Orebla.it
DOVE TI TROVI: \\ Home Page\c\Guida al C : Preparazione di una funzione per la generazione di numeri casuali

LINGUAGGIO C GUIDA:

Preparazione di una funzione per la generazione di numeri casuali


Nel seguito del corso useremo spesso la funzione per generare numeri casuali; la dichiarazione di questa funzione si trova all'interno del file stdlib.h.

La funzione va utilizzata in questo modo:

(1) inserire, in qualsiasi punto del programma UNA sola chiamata alla funzione

void srand(unsigned int)

(2) richiamare, ogni volta in cui abbiamo bisogno di un numero casuale, la funzione

int rand(void)

la quale restituisce un intero positivo compreso tra 0 ed il numero RAND_MAX, estremi inclusi.


Il nome RAND_MAX identifica il massimo intero positivo che pu? essere restituito dalla funzione ed ? fissato (la sua definizione si trova nel file stdlib.h) da chi ha impostato il compilatore e
NON VA ALTERATO PER NESSUN MOTIVO !


Facciamo un esempio:

#include <stdlib.h>
#include <stdio.h>

int main()
{int numero_casuale;
 srand(5748957);
 numero_casuale = rand();
 printf("\n il numero casuale ottenuto e\' : %d \n",numero_casuale);
 printf("\nIl massimo numero casuale ottenibile con rand() e\' : %d",RAND_MAX);
 return 0;}

In futuro sar? necessario generare numeri casuali con queste caratteristiche:

(1) potranno essere di tipo intero o di tipo double

(2) dovranno variare tra un valore minimo ed un valore massimo

Visto che la funzione rand() non soddisfa queste caratteristiche, costruiamo due funzioni che ci permettano di generare numeri casuali, sia di tipo intero che di tipo decimale, compresi tra due estremi fissati arbitrariamente. Tali funzioni vanno salvate in un file che potremo richiamare mediante una direttiva #include nel momento in cui, durante le prossime lezioni, sia necessario generare numeri casuali.

L'implementazione delle funzioni si basa su questo ragionamento:
(a) un numero, num, compreso tra estremi arbitrari, min e max, estremi inclusi, pu? essere scritto come num = valore + min (supponendo che valore sia compreso tra 0 e (max - min + 1)).

(b) il problema si riduce quindi a generare numeri casuali compresi tra 0 e (max - min), estremi inclusi

(c) rand() produce numeri casuali compresi tra 0 e RAND_MAX (estremi inclusi); devo perci? fare in modo di ridurre l'intervallo (
SENZA ALTERARE RAND_MAX). Per ottenere questo risultato si possono usare due metodi.


/*    inizio del file       */


/*                     *****************************

Attenzione ! la chiamata a srand() va effettuata nel file da cui si richiama una delle due funzioni

                        *****************************      */

#include <stdlib.h>



int int_rand(int,int) // generatore di numeri casuali di tipo intero

double doub_rand(double,double)
// generatore di numeri casuali di tipo double


int int_rand(int min,int max)
{int numero_casuale;
 int differenza;
 differenza = (max - min) + 1;
 numero_casuale = rand() % differenza ;
 numero_casuale = numero_casuale + min ;
 return numero_casuale;
}

double doub_rand(double min,double max)
{double numero_casuale,differenza;
 differenza = (max - min);
 numero_casuale = (rand()/RAND_MAX) * differenza;
 numero_casuale += min ;
 return doub_casuale;
}

/*    fine del file       */



----INDICE----






Articoli utili:
Jailbreak iOS 10: tweaks compatibili

Recensione iPhone 6

IPhone 7 uscito, novita, prezzi