Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [C]la funzione rand(void) mi compie degli errori

    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.
    codice:
    #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.
    File allegati File allegati
    Ultima modifica di MItaly; 13-08-2014 a 12:41

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    srand deve essere usata una sola volta nel main, non per ogni lancio
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    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.
    codice:
    #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;
    }
    Ultima modifica di MItaly; 13-08-2014 a 14:32

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma come è scritta la generaLancio? Perché c'è dentro la int rand(void) ??

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

    codice:
    int generaLancio()
    {
    	int a;
    	a=rand()%2;
    	
    	return a;
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    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!!!!

  6. #6
    codice:
    int generaLancio(){
        int rand(void){
            srand(time(NULL));
            return rand()% 2;
            }
        }
    Ultima modifica di MItaly; 13-08-2014 a 14:33

  7. #7

    Moderazione

    Benvenuto sul forum! Il codice va specificato tra tag [CODE] ... [/CODE], altrimenti perde l'indentazione e l'evidenziazione della sintassi.

    Questa volta ho corretto io; nel frattempo ti consiglio di dare un'occhiata al regolamento.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quote Originariamente inviata da maseeeeeee Visualizza il messaggio
    codice:
    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

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






    Ultima modifica di oregon; 13-08-2014 a 17:24
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.