PDA

Visualizza la versione completa : [C]la funzione rand(void) mi compie degli errori


maseeeeeee
13-08-2014, 12:20
Salve, a tutti premetto che sono nuovo in questo forum(quindi potrei sbagliare qualcosina ,ditemi se sbaglio) e premetto che è da circa un mese che sto programmando in C.
Frequento il primo anno di ingegneria informatica e dopo aver fatto fondamenti di informatica in python(molto simpatico per la sua semplicità)mi sto cimentando in C. Ill programma che devo fare ha il solo compito di dirmi dato un numero N(input)di lanci,quante volte esce testa(1) e quante volte esce croce(0).Non Capisco perche la mia funzione rand che dovrebbe produrre casualmente solo '0' oppure '1' mi si aggiorna come se fosse un contatore.Grazie in anticipo per qualunque risposta.


#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int generaLancio(){
int rand(void){
srand(time(NULL));
return rand()% 2;
}
}


void Aggiorna(int*testa,int*croce,int esito){
int cont=1;
*testa=0;
*croce=0;
while(cont<=esito){
int ris=generaLancio();
printf("%d",ris);
if(ris==0){
(*croce)++;
cont++;
}
else{
(*testa)++;
cont++;
}
}
printf("\n");
printf("sono uscite %d volte testa e %d volte croce\n",*testa,*croce);
}
int main(){
int t=0,c=0,esit;
printf("inserisci il numero di lanci: ");
scanf("%d",&esit);
Aggiorna(&t,&c,esit);
return 0;
}

succede che int ris=generaLancio() che deve valere o 0 o 1 facendo oppurtuni printf mi accorgo che vale 1,2,3,4,5,6,ecc.

oregon
13-08-2014, 13:04
srand deve essere usata una sola volta nel main, non per ogni lancio

maseeeeeee
13-08-2014, 13:15
Intanto grazie Oregon ,ho copiato l'istruzione srand nel main ma è uguale a prima .Adesso ho modificato il codice in questo modo e mi stampa tanti 0 quanto è l'input di lanci.


#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int a;
int generaLancio(){
int rand(void){
a=rand()%2;
return a;
}
return 0;
}


void Aggiorna(int*testa,int*croce,int esito){
int cont=1;
*testa=0;
*croce=0;
while(cont<=esito){
int ris=-1;
ris=generaLancio();
printf("%d",ris);
if(ris==0){
*croce+=1;
}
else{
*testa+=1;
}
cont++;

}
printf("\n");
printf("sono uscite %d volte testa e %d volte croce\n",*testa,*croce);
return;
}
int main(){
int t=0,c=0,esit;
srand(time(NULL));
printf("inserisci il numero di lanci: ");
scanf("%d",&esit);
Aggiorna(&t,&c,esit);
return 0;
}

oregon
13-08-2014, 13:21
Ma come è scritta la generaLancio? Perché c'è dentro la int rand(void) ??

Non ha senso e non so come compili ... deve essere



int generaLancio()
{
int a;
a=rand()%2;

return a;
}

maseeeeeee
13-08-2014, 13:32
risolto grazie mille gentilissimo!!!:)purtroppo il mio prof nelle dispense si è spiegato male,tuttavia un mio amico l'ha fatto diversamente dal mio ma questa parte qui è uguale alla mia.Se ti va dopo ti invio il suo codice,sarebbe molto utile per me capire.Grazie ancora Oregon e buona giornata!!!!

maseeeeeee
13-08-2014, 13:33
int generaLancio(){
int rand(void){
srand(time(NULL));
return rand()% 2;
}
}

MItaly
13-08-2014, 14:33
Benvenuto sul forum! :) Il codice va specificato tra tag
... , altrimenti perde l'indentazione e l'evidenziazione della sintassi.

Questa volta ho corretto io; nel frattempo ti consiglio di dare un'occhiata al regolamento (http://forum.html.it/forum/showthread.php?s=&threadid=973887).
:ciauz:

oregon
13-08-2014, 17:08
int generaLancio(){
int rand(void){
srand(time(NULL));
return rand()% 2;
}
}


Questa è sbagliata perché

a) srand non va eseguita sempre

b) la funzione int rand(void) ... non ha senso scriverlo ...

Come ti avevo già detto basta



int generaLancio(){
return rand()%2;
}

maseeeeeee
13-08-2014, 17:19
ok chiedo scusa per l'errore immaginavo di fare qualche errore.La prossima volta starò più attento.Grazie per il benvenuto.grazie anche a Oregon:cool:

Loading