Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente bannato
    Registrato dal
    Jan 2003
    Messaggi
    1,414

    [C] princicpiante funzioni

    Ok, forse e` una domanda un po` idiota ma

    Allora, ecco il problema:

    Io ho questo programma, che simula il gioco dei dadi craps, e` presente solo la funzione main() e quella che simula il lancio casuale dei dadi tiro()


    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int tiro(void);
    
    main() {
    
    int stato, somma, punteggio;
    
    srand(time(NULL));
    somma = tiro();
    
    switch (somma) {
    
    case 7: case 11:
    stato = 1;
    break;
    
    
    case 2: case 3: case 12:
    stato = 2;
    break;
    
    default:
    stato = 0;
    punteggio = somma;
    
    printf ("il punteggio e` %d \n" , punteggio);
    break;
    }
    
    while (stato == 0) {
    somma = tiro();
    
    if (somma == punteggio)
    stato = 1;
    
    else if (somma == 7)
    stato = 2;
    }
    
    if (stato == 1)
    printf ("hai vinto!\n");
    else printf ("hai perso\n");
    
    return 0;
    }
    
    int tiro(void)
    {
    int dado1, dado2, sommadadi;
    
    dado1 = 1 + (rand() %6);
    dado2 = 2 + (rand() %6);
    sommadadi = dado1 + dado2;
    printf ("la somma di %d e %d e` %d \n" , dado1 , dado2, sommadadi);
    return sommadadi;
    }
    Ora io dovrei impacchettare la funionem main() che esegue il gioco in una funzione normale, e avere una main che permetta al giocatore di eseguire una puntata.

    Tutto filerebbe liscio, se non fosse per il fatto che non so come richiamare la funzione gioco() [la vecchia main]

    Il programma mi verrebbe cosi`, dove ci sono i commenti dovrei caricare la funzione gioco e tutte le variabili che contiene. Come fare? :master:




    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int gioco();
    int tiro(void);
    
    main() {
    
    int puntata, soldi;
    soldi = 1000;
    
    printf ("gioco dei dadi craps - \n");
    
    do { 
    printf ("inserisci una puntata valida \n");
    scanf (" %d " , &puntata);
    
    // qui dovrei far partire la funzione gioco()
    
    if (stato == 1) {
    printf ("hai vinto la tua puntata! \n");
    soldi = soldi +  puntata;
    printf ("ora hai un totale di %d soldi \n" , soldi);
    }
    else {
    printf ("peccato, hai perso la tua puntata \n");
    soldi == soldi - puntata;
    printf (" ora hai un totale di %d soldi \n" , &soldi);
    }
    while (puntata <== soldi);
    
    return 0;
    }
    
    int gioco() {
    
    int stato, somma, punteggio;
    
    srand(time(NULL));
    somma = tiro();
    
    switch (somma) {
    
    case 7: case 11:
    stato = 1;
    break;
    
    
    case 2: case 3: case 12:
    stato = 2;
    break;
    
    default:
    stato = 0;
    punteggio = somma;
    
    printf ("il punteggio e` %d \n" , punteggio);
    break;
    }
    
    while (stato == 0) {
    somma = tiro();
    
    if (somma == punteggio)
    stato = 1;
    
    else if (somma == 7)
    stato = 2;
    }
    
    if (stato == 1)
    printf ("hai vinto!\n");
    else printf ("hai perso\n");
    
    return gioco();
    }
    
    int tiro(void)
    {
    int dado1, dado2, sommadadi;
    
    dado1 = 1 + (rand() %6);
    dado2 = 2 + (rand() %6);
    sommadadi = dado1 + dado2;
    printf ("la somma di %d e %d e` %d \n" , dado1 , dado2, sommadadi);
    return sommadadi;
    }
    Grazie a tutti.

  2. #2
    Utente di HTML.it L'avatar di pdpmpd
    Registrato dal
    Jan 2003
    Messaggi
    448
    spiegami perchè "gioco" ritorna "gioco".
    (chiamata ricorsiva??)

  3. #3
    Utente di HTML.it L'avatar di pdpmpd
    Registrato dal
    Jan 2003
    Messaggi
    448
    comunque se vuoi chiamare gioco è:
    gioco();
    o, se vuoi,
    int g=gioco();

  4. #4
    Utente bannato
    Registrato dal
    Jan 2003
    Messaggi
    1,414
    Originariamente inviato da pdpmpd
    comunque se vuoi chiamare gioco è:
    gioco();
    o, se vuoi,
    int g=gioco();
    Grazie mille

    Ho provato a fare come hai detto tu, e cioe` cosi`

    codice:
    main() {
    
    int puntata, soldi;
    soldi = 1000;
    
    printf ("gioco dei dadi craps - \n");
    
    do {
    printf ("inserisci una puntata valida \n");
    scanf (" %d " , &puntata);
    
    // qui dovrei far partire la funzione gioco()
    gioco();
    
    if (stato == 1) {
    printf ("hai vinto la tua puntata! \n");
    soldi = soldi +  puntata;
    printf ("ora hai un totale di %d soldi \n" , soldi);
    }
    else {
    printf ("peccato, hai perso la tua puntata \n");
    soldi == soldi - puntata;
    printf (" ora hai un totale di %d soldi \n" , &soldi);
    }
    while (puntata <== soldi);
    
    return 0;
    }
    Ma il compilatore mi segnala un sacco di errori, tra tutti il fatto che non mi riconosce le variabili stato, somma ecc

  5. #5
    Utente di HTML.it L'avatar di pdpmpd
    Registrato dal
    Jan 2003
    Messaggi
    448
    stato e somma non sono nello scope del main (sono state dichiarate in gioco)

  6. #6
    Utente bannato
    Registrato dal
    Jan 2003
    Messaggi
    1,414
    Appunto, sono nella funzione Gioco.

    Non posso caricare oltre alla funzione gioco() tutte le sue variabili?

    Senno come faccio?? :master:

  7. #7
    Utente di HTML.it L'avatar di pdpmpd
    Registrato dal
    Jan 2003
    Messaggi
    448
    ci sono vari modi di farle tornare, per esempio :
    1. dichiari quelle variabili come globali;
    2. passi dei puntatori (a int esterni) alla funzione gioco in modo che li usi al posto di somma...ecc.ecc.

  8. #8
    Utente di HTML.it L'avatar di pdpmpd
    Registrato dal
    Jan 2003
    Messaggi
    448
    esempio:
    codice:
    int gioco(int *somma, int *punteggio) {
      int stato;
    
    srand(time(NULL));
    *somma = tiro();
    
    switch (*somma) {
    
    case 7: case 11:
    stato = 1;
    break;
    
    
    case 2: case 3: case 12:
    stato = 2;
    break;
    
    default:
    stato = 0;
    *punteggio = *somma;
    
    printf ("il punteggio e` %d \n" , *punteggio);
    break;
    }
    
    while (stato == 0) {
    *somma = tiro();
    
    if (*somma == *punteggio)
    stato = 1;
    
    else if (*somma == 7)
    stato = 2;
    }
    
    return stato;
    }

  9. #9
    Utente bannato
    Registrato dal
    Jan 2003
    Messaggi
    1,414
    Originariamente inviato da pdpmpd
    ci sono vari modi di farle tornare, per esempio :
    1. dichiari quelle variabili come globali;
    2. passi dei puntatori (a int esterni) alla funzione gioco in modo che li usi al posto di somma...ecc.ecc.
    W l`ignoranza...

    I puntatori non li ho ancora studiati, e cmq dovrei poterne fare a meno...

    Variabili globali? Mi fai un es per favore? grazie

  10. #10
    Utente di HTML.it L'avatar di pdpmpd
    Registrato dal
    Jan 2003
    Messaggi
    448
    ok (comunque è migliore la soluzione che ti ho scritto sopra)...

    per avere delle variabili globali le devi dichiarare FUORI da ogni blocco del programma (le dichiari insieme ai prototipi delle funzioni).
    Le variabili di questo tipo possono essere lette e modificate da OGNI funzione del programma.

    Per Es (riporto solo l'inizio del tuo programma):
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int gioco();
    int tiro(void);
    // variabili globali
    int somma,stato,punteggio;
    
    main() {
    //codice
    //ecc.ecc.
    Un'ultima cosa. ti merita far ritornare "stato" dalla funzione "gioco": eviti una variabile inutile.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.