Numeri casuali in c
ciao,
mi potreste indicare una dispensa che tratti la generazione di numeri casuali in c
grazie
mi potreste indicare una dispensa che tratti la generazione di numeri casuali in c
grazie
Risposte
Non è che ci sia molto da dire sulla generazione di numeri casuali in C, almeno limitandosi alle librerie standard. Le funzioni che è necessario conoscere sono infatti solo due: srand e rand. La prima deve essere chiamata una sola volta all'inizio del programma per inizializzare lo stato del generatore di numeri casuali, mentre la seconda va chiamata ogni volta si desideri ottenere un numero casuale. Una veloce ricerca con google dovrebbe restituire parecchi codici di esempio. C'è qualcosa di particolare che stai cercando? Per esempio come ottenere valori in un qualche intervallo oppure a virgola mobile o ...
guarda ti ringrazio... no nulla in particolare, pensavo solo che ci fosse molto di più, tutto qui.. le librerie fondamentali sono ;
stdlib e time..
stdlib e time..
per esempio.... esiste una funzione che mi permette di generare un numero casuale compreso tra 5 e 10? altrimenti se non esiste si può procedere così : genero un numero casuale compreso tra 0 e 10 se il numero x è maggiore di 5 lo tengo mentre se è inferiore a 5 faccio x+5, in questo modo ottengo numeri compresi tra 5 e 10
Non ci sono funzioni che lo fanno nello standard C. Normailmente si genera un numero compreso tra 0 e 5 e poi si somma 5 al risultato oppure si genera un numero tra 0 e RAND_MAX e si fa quindi un cast verso float o double. A questo punto si divide per RAND_MAX e si moltiplica per 5 e somma 5 per poi fare un cast nuovamente verso int. Più complicato e lento ma ha caratteristiche migliori. Ma spesso si usano librerie non standard...
Salve baldo89,
Il tuo procedimento in parte si potrebbe fare, solo che se fai +5 per i numeri inferiori a 5 non ti so dire se sono più casuali.. al più dovresti iterare la generazione del numero casuale tra 0 e 10 sino a quando non ottiene un numero maggiore di 5. Per fare questo però dovresti introdurre prima del ciclo iterativo alcune istruzioni.....
Però questo processo io non lo consiglio!
Cordiali saluti
"baldo89":
per esempio.... esiste una funzione che mi permette di generare un numero casuale compreso tra 5 e 10? altrimenti se non esiste si può procedere così : genero un numero casuale compreso tra 0 e 10 se il numero x è maggiore di 5 lo tengo mentre se è inferiore a 5 faccio x+5, in questo modo ottengo numeri compresi tra 5 e 10
Il tuo procedimento in parte si potrebbe fare, solo che se fai +5 per i numeri inferiori a 5 non ti so dire se sono più casuali.. al più dovresti iterare la generazione del numero casuale tra 0 e 10 sino a quando non ottiene un numero maggiore di 5. Per fare questo però dovresti introdurre prima del ciclo iterativo alcune istruzioni.....
Però questo processo io non lo consiglio!
Cordiali saluti
Salve baldo89,
premetto che è da più di un anno che non tocco informatica, comunque sono andato a rispolverare alcuni appunti sul mio computer, è l'istruzione che io ho utilizzato è la seguente, dati due numeri a e b, interi-positivi-diversi da zero ed b>a:
L'istruzione di sopra genererà un numero randomico compreso nell'intervallo [a;b-1], quindi occorre,
anche qui, fare molta attenzione all'estremo superiore che si sceglie ed incrementarlo di 1, ovvero si può scrivere anche:
A questi blocchi di istruzioni aggiungerei anche la srand()...il tempo macchina......
Cordiali saluti
P.S.=Spero di non aver fatto errori, ribadisco che è da più di un anno che non tocco informatica.
premetto che è da più di un anno che non tocco informatica, comunque sono andato a rispolverare alcuni appunti sul mio computer, è l'istruzione che io ho utilizzato è la seguente, dati due numeri a e b, interi-positivi-diversi da zero ed b>a:
{ . . range = (b - a); nome_identificatore_variabile_randomica = (rand() % range) + a; . . }
L'istruzione di sopra genererà un numero randomico compreso nell'intervallo [a;b-1], quindi occorre,
anche qui, fare molta attenzione all'estremo superiore che si sceglie ed incrementarlo di 1, ovvero si può scrivere anche:
{ . . . c = b + 1; range = (c - a); nome_identificatore_variabile_randomica = (rand() % range) + a; . . . }
A questi blocchi di istruzioni aggiungerei anche la srand()...il tempo macchina......
Cordiali saluti
P.S.=Spero di non aver fatto errori, ribadisco che è da più di un anno che non tocco informatica.
io ho fatto così, funziona perfettamente
#include<stdio.h> #include<math.h> #include<stdlib.h> #include<time.h> main() { int i,n,y[100]; double a,b,x[100]; printf("Questo programma genera numeri casuali "); printf("Quanti numeri casuali vuoi generare ?\n"); scanf("%d",&n); printf("Da quale numero vuoi iniziare a generare numeri casuali?\n"); scanf("%lf",&a); printf("Fino a quale numero vuoi generare numeri casuali?"); scanf("%lf",&b); srand(time(NULL)); i=1; while (i<=n) { y[i]=rand(); x[i]=b*y[i]/RAND_MAX; if (x[i]>=a) { printf("%lf \n",x[i]); i++; } } }