Newsgroup: it.comp.lang.c
Titolo: problemi con funzione rand()

... credo sia un problema della funzione rand() ... il programma gira troppo
velocemente e il seed(time(Null)) ... restituisce sempre lo stesso valore,
eppure a e b sono diversi ... però se faccio un debug e lo faccio girare a
mano funzia ...come risolvere per generare numeri casuali bene anche in 1
microsecondo di esecuzione?
FARE UN PROG CHE GIOCHI A DADI:
-GENERARE 2 NUMERI DA 1 A 6 E FARE LA SOMMA
-AL PRIMO LANCIO 2-3-12 PERDONO, 7-11 VINCONO
SE ESCE UN NUMERO DIVERSO SI RILANCIANO I DADI:
-SE SI RIESCE A FARE LO STESSO NUMERO SI VINCE
-SE PRIMA CHE SI RIESCA A FARE LO STESSO NUMERO ESCE IL 7 SI PERDE
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int rand(void);
void srand(unsigned int seed);
int i, tiro1, tiroX;
int dado (void)
{
int a,b,seed;
seed = (time(NULL));
srand(seed);
a=(rand()%7);
b=(rand()%7);
printf ("Primo dado .... oohhhh %d\n",a);
printf ("Secondo dado .... ohhhhh %d\n",b);
return (a+b);
}
void main (void)
{
printf ("Prima manches\n");
tiro1 = dado();
printf ("La somma e' %d\n\n\n",tiro1);
if (tiro1==2 || tiro1==3 || tiro1==12)
printf("Hai perso al primo colpo!!\n");
else if (tiro1==7 || tiro1==11)
printf("Hai vinto al primo colpo!!!!\n");
else {
i=1;
printf ("Seconda manches\n");
do {
printf ("tiro di nuovo...");
tiroX=dado();
printf ("... e' uscito ... %d al tiro numero --%d--\n",tiroX,i);
i++;
} while ((tiroX!=tiro1) && (tiroX!=7));
if (tiroX==tiro1)
printf ("Hai vinto hai fatto lo stesso numero di prima\n ");
else
printf ("hai perso e' uscito il 7!!");
}
}

microsecondo di esecuzione?
Basta chiamare srand una volta sola nel main, e 
non ad ogni estrazione.
HTH
Andrea

 non ad ogni estrazione.
inoltre, chiamando rand()%7, a parte la polemica su bit alti e bassi, si 
hanno i numeri da 0 a 6, non da 1 a 6

"Paolo Podda" <p.p...@tiscaliNOSPAM.it> ha scritto nel messaggio
news:2068333.2...@news.iol.it...

grazie 1000 ad entrambi ... come vedete sono alle prime armi ... ma voglio
imparare bene!!!
Vi ringrazio e vi auguro buone feste!
:-Peg

 > hanno i numeri da 0 a 6, non da 1 a 6
ps ...
a=(rand()%6)+1;
b=(rand()%6)+1;
cosi' risolvo giusto?
thanx 1000 !

 a=(rand()%7);
a=(rand()%6)+1;
Tommy

 cosi' risolvo giusto?
Cosi' ottieni numeri da 1 a 6... piu' in generale per ottenere numeri da "A" 
a "B" (con "B" > "A"), fai:
    rand()%(B-A+1)+A
Resta comunque un "pessimo" generatore di numeri casuali (la polemica di cui 
ti veniva accennato nei messaggi precedenti).
Ne avresti uno migliore con un minimo sforzo facendo:
(int)((double)rand() / ((double)RAND_MAX+1)*N)  [1]
Questo genera ancora numeri pseudo-casuali tra 0 e N-1, ma secondo una 
distribuzione uniforme che non risente della "polemica" di cui sopra.
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."

microsecondo di esecuzione?
srand inizializza in base al numero che gli passi il seed... ma a
questo punto puoi generare i numeri casuali che ti pare con rand senza
dover inizializzare ogni volta il seed da capo !
Augusto Pucci
http://www.neuraldaemon.com/pucci

Devo realizzare un programma in C per l' università ma la programmazione non
fa per me, cerco qualcuno nell' area di Parma (Parma, Reggio, Modena,Milano,
Mantova...) disposto a realizzarmelo...naturalmente sono disposto a pagare!
Vi prego aiutatemi o va a finire che per colpa di questo esame mi laureo tra
20anni.

In un attimo di smarrimento Marcello Casalini disse:

posta l'esercizio.
si vede cosa si può fare...
ciao
-- 
By_Baitch
"Live Your Life!" (Ring ain't a jail)
http://utenti.tripod.it/baitch

 wrote

Sui NG si offre aiuto gratuito, ma a chi vuole imparare ed e' pronto ad
impegnarsi e... dove ahime non riesce ecco il NG che viene in soccorso!
Se invece di essere disposto a pagare, tu fossi disposto a sforzarti di
provare e capire allora avresti gente che in un paio di post te lo farebbe
gratis in men che non si dica..... (ovvio, dipende dalla complessita' del
programma!)
Se riesci a cambiare "intenzioni" forse noi riusciamo ad aiutarti!
Tommy