Problema col C
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è?
#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
devi portare srand(...) fuori dal ciclo do
ho fatto come dici tu ma mi esegue lo stesso 5 croci di seguito...
l'istruzione rand()%2 mi sa che restituisce sempre lo stesso valore, io approssimerei il numero casuale all'intero più vicino.
Vedo un AND bit-wise tra 5 e crocicons...
Ed anche un "=" anziché "==" ...
"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
"lorven":
Ed anche un "=" anziché "==" ...
dove?
"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)
"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.
"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?
"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

"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(...)
lorven, grazie ti adoro!!! grazie anche a luca della disponibilità
"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.
Scusa fransis2 di dove sei?