Problema col C

fransis2
ragazzi ho un problema. Devo creare un programma che simuli una successione di lanci di moneta (testa o croce) fino a che escano 5 croci o 5 teste di seguito. Io ho fatto così:


#include
#include
#include
int main() {
int lancio, testecons, crocicons, a;
testecons=0;
crocicons=0;
do {
srand(time(NULL));
lancio=rand()%2;
if (lancio=0) {
printf("testa\n");
testecons=testecons+1;
crocicons=0;
}
if (lancio=1) {
printf("croce\n");
testecons=0;
crocicons=crocicons+1;
}
}
while((testecons<5 & crocicons<5));
printf("premi un tasto e dopo invio per uscire\n");
scanf("%d", &a);
return EXIT_SUCCESS;
}



però questo programma invece di generarmi numeri pesudo casuali mi genera sempre 5 croci di seguito... perchè?

Risposte
_luca.barletta
devi portare srand(...) fuori dal ciclo do

fransis2
ho fatto come dici tu ma mi esegue lo stesso 5 croci di seguito...

_luca.barletta
l'istruzione rand()%2 mi sa che restituisce sempre lo stesso valore, io approssimerei il numero casuale all'intero più vicino.

lorven
Vedo un AND bit-wise tra 5 e crocicons...

lorven
Ed anche un "=" anziché "==" ...

fransis2
"luca.barletta":
l'istruzione rand()%2 mi sa che restituisce sempre lo stesso valore, io approssimerei il numero casuale all'intero più vicino.

non dovrebbe restituire sempre lo stesso valore dato che ho usato lo srand(time(NULL)) per randomizzare

fransis2
"lorven":
Ed anche un "=" anziché "==" ...

dove?

_luca.barletta
"fransis2":
[quote="luca.barletta"]l'istruzione rand()%2 mi sa che restituisce sempre lo stesso valore, io approssimerei il numero casuale all'intero più vicino.

non dovrebbe restituire sempre lo stesso valore dato che ho usato lo srand(time(NULL)) per randomizzare[/quote]

intendo dire che se vuoi ottenere una serie di 1 e 0 dovresti approssimare il numero casuale all'intero più vicino (che sono appunto 1 e 0)

fransis2
"lorven":
Vedo un AND bit-wise tra 5 e crocicons...

ma infatti ci vuole l'AND, no? se ci mettessi l'OR mi continuerebbe a eseguire lanci fino a che almeno uno tra testecons e crocicons sarebbe < 5 quindi per terminare il programma dovrebbero diventare entrambi >=5 mentre io voglio che il programma termini prorpio quando SOLO 1 dei 2 diventi 5 per cui ci vuole l'AND.

fransis2
"luca.barletta":
[quote="fransis2"][quote="luca.barletta"]l'istruzione rand()%2 mi sa che restituisce sempre lo stesso valore, io approssimerei il numero casuale all'intero più vicino.

non dovrebbe restituire sempre lo stesso valore dato che ho usato lo srand(time(NULL)) per randomizzare[/quote]

intendo dire che se vuoi ottenere una serie di 1 e 0 dovresti approssimare il numero casuale all'intero più vicino (che sono appunto 1 e 0)[/quote]
e come si fa a il numero casuale all'intero più vicino?

lorven
"fransis2":
ragazzi ho un problema. Devo creare un programma che simuli una successione di lanci di moneta (testa o croce) fino a che escano 5 croci o 5 teste di seguito. Io ho fatto così:


#include
#include
#include
int main() {
int lancio, testecons, crocicons, a;
testecons=0;
crocicons=0;
do {
srand(time(NULL));
lancio=rand()%2;
if (lancio=0) {
printf("testa\n");
testecons=testecons+1;
crocicons=0;
}
if (lancio=1) {
printf("croce\n");
testecons=0;
crocicons=crocicons+1;
}
}
while((testecons<5 & crocicons<5));
printf("premi un tasto e dopo invio per uscire\n");
scanf("%d", &a);
return EXIT_SUCCESS;
}



però questo programma invece di generarmi numeri pesudo casuali mi genera sempre 5 croci di seguito... perchè?

- devi sostituire "=", che sta per assegnazione, con "==", che sta per confronto logico
- "&", ossia AND bit-wise, effettua AND tra i singoli bit delle 2 espresioni; va sostituito con "&&" per effettuare l'AND logico :-)

_luca.barletta
"fransis2":
[quote="luca.barletta"][quote="fransis2"][quote="luca.barletta"]l'istruzione rand()%2 mi sa che restituisce sempre lo stesso valore, io approssimerei il numero casuale all'intero più vicino.

non dovrebbe restituire sempre lo stesso valore dato che ho usato lo srand(time(NULL)) per randomizzare[/quote]

intendo dire che se vuoi ottenere una serie di 1 e 0 dovresti approssimare il numero casuale all'intero più vicino (che sono appunto 1 e 0)[/quote]
e come si fa a il numero casuale all'intero più vicino?[/quote]

la funzione è round(...)

fransis2
lorven, grazie ti adoro!!! grazie anche a luca della disponibilità

Gummitch1
"lorven":
Ed anche un "=" anziché "==" ...

Sì, lancio=0 assegna zero a lancio invece di fare il confronto.
Poi per mantenere la spaziatura penso che dovresti mettere il codice tra i tag [ code ][ / code ], credo.

Ops, già detto.

alvinlee881
Scusa fransis2 di dove sei?

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.