Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    15

    [C] Simulatore distributore bevande

    Ciao a tutti ragazzi, allora ho appena finito di compilare un programma, ma purtroppo una volta compilato ed eseguito sono apparse subito delle imperfezioni.
    Allora lo scopo del programma e quello di simulare un un deistributore di bevande.
    E questo e il codice sorgente che ho creato.
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    
    int main()
    {
    int P;  // prodotti
    int Pr; // prezzo del prodotto
    int MON; // monette
    int Imp; // vallore dell'importo
    int DIF; // centesimi mancanti
    int RT;  // resto totale
    int RC;  // resto monete da 5 cent
    int RU;  // resto monete da 1 cent
    printf("           Menu di scelta              \n");
    printf(" _____________________________________\n ");
    printf("|  1. Caffe' ---> 70 cent                            |\n");         
    printf("|  2. The' ---> 50 cent                              |\n");           
    printf("|  3. Cioccolata ---> 100 cent                    |\n");    
    printf("|  4. Cappuccino ---> 125 cent                   |\n");    
    printf("|  5. Macchiatone ---> 90 cent                   |\n");    
    printf(" ______________________________________\n");
    printf("Selezionare il prodotto desiderato\n");
    scanf("%d",& P);
    while(P!=1 && P!=2 && P!=3 && P!=4 && P!=5)
    {
    printf("Riselezionare prodotto, scelta errata\n");
    scanf("%d",& P);
    }
    switch(P)
    {
    case 1:
    {
    printf("Lei ha selezionato un Caffe'\n");
    Pr=70;
    Imp=0;
    while(Imp<Pr)
    {
      printf("Inserire la moneta\n");
      scanf("%d",&MON);
      while(MON!=1 && MON!=5 && MON!=10 && MON!=20 && MON!=50)
      {
      printf("Questo distributore accetta solo 1, 5, 10, 20, 50 centesimi\n");
      printf("Inserire la moneta\n");
      scanf("%d",&MON);  
      }
      Imp=Imp+MON;
      DIF=Pr-Imp;
      printf("Mancano %d centesimi\n",DIF);
    
    
    }
      RT=Imp-Pr;
      RC=RT/5;
      RU=RT-(RC*5);
      printf("Il resto e' di %d centesimi, %d monete da 5 centesimi e %d monete da 1 centesimo\n",RT,RC,RU); 
      system("PAUSE");    
      return 0;
    }
    break;
    
    
    case 2:
    {
    printf("Lei ha selezionato un The'");
    Pr=50;
    Imp=0;
    while(Imp<Pr)
    {
      printf("Inserire la moneta\n");
      scanf("%d",&MON);
      while(MON!=1 && MON!=5 && MON!=10 && MON!=20 && MON!=50)
      {
      printf("Questo distributore accetta solo 1, 5, 10, 20, 50 centesimi\n");
      printf("Inserire la moneta\n");
      scanf("%d",&MON);  
      }
      Imp=Imp+MON;
      DIF=Pr-Imp;
      printf("Mancano %d centesimi\n",DIF);
    
    
    }
      RT=Imp-Pr;
      RC=RT/5;
      RU=RT-(RC*5);
      printf("Il resto e' di %d centesimi, %d monete da 5 centesimi e %d monete da 1 centesimo\n",RT,RC,RU); 
      system("PAUSE");    
      return 0;
    }
    break;
    
    
    case 3:
    {
    printf("Lei ha selezionato un cioccolata");
    Pr=100;
    Imp=0;
    while(Imp<Pr)
    {
      printf("Inserire la moneta\n");
      scanf("%d",&MON);
      while(MON!=1 && MON!=5 && MON!=10 && MON!=20 && MON!=50)
      {
      printf("Questo distributore accetta solo 1, 5, 10, 20, 50 centesimi\n");
      printf("Inserire la moneta\n");
      scanf("%d",&MON);  
      }
      Imp=Imp+MON;
      DIF=Pr-Imp;
      printf("Mancano %d centesimi\n",DIF);
    
    
    }
      RT=Imp-Pr;
      RC=RT/5;
      RU=RT-(RC*5);
      printf("Il resto e' di %d centesimi, %d monete da 5 centesimi e %d monete da 1 centesimo\n",RT,RC,RU); 
      system("PAUSE");    
      return 0;
    }
    break;
    
    
    case 4:
    {
    printf("Lei ha selezionato un cappuccino");
    Pr=125;
    Imp=0;
    while(Imp<Pr)
    {
      printf("Inserire la moneta\n");
      scanf("%d",&MON);
      while(MON!=1 && MON!=5 && MON!=10 && MON!=20 && MON!=50)
      {
      printf("Questo distributore accetta solo 1, 5, 10, 20, 50 centesimi\n");
      printf("Inserire la moneta\n");
      scanf("%d",&MON);  
      }
      Imp=Imp+MON;
      DIF=Pr-Imp;
      printf("Mancano %d centesimi\n",DIF);
    
    
    }
      RT=Imp-Pr;
      RC=RT/5;
      RU=RT-(RC*5);
      printf("Il resto e' di %d centesimi, %d monete da 5 centesimi e %d monete da 1 centesimo\n",RT,RC,RU); 
      system("PAUSE");    
      return 0;
    }
    break;
    
    
    case 5:
    {
    printf("Lei ha selezionato un macchiatone");
    Pr=90;
    Imp=0;
    while(Imp<Pr)
    {
      printf("Inserire la moneta\n");
      scanf("%d",&MON);
      while(MON!=1 && MON!=5 && MON!=10 && MON!=20 && MON!=50)
      {
      printf("Questo distributore accetta solo 1, 5, 10, 20, 50 centesimi\n");
      printf("Inserire la moneta\n");
      scanf("%d",&MON);  
      }
      Imp=Imp+MON;
      DIF=Pr-Imp;
      printf("Mancano %d centesimi\n",DIF);
    
    
    }
      RT=Imp-Pr;
      RC=RT/5;
      RU=RT-(RC*5);
      printf("Il resto e' di %d centesimi, %d monete da 5 centesimi e %d monete da 1 centesimo\n",RT,RC,RU); 
      system("PAUSE");    
      return 0;
    }
    break;
    }
     
      system("PAUSE");    
      return 0;
    }
    adesso il programma funziona alla perfezione ma ce un unica imperfezione, una volta ragiunto l'importo del prezzo e quindi finita la procedure di immisione delle monete, se ad esempio ho inserito un numero di cent maggiore del prezo e quindi mi dovra dare il resto, il messaggio di output che mi dice ogni volta quanti centesimi mancano non si ferma a 0 ma va sotto lo 0, cioe al posto di dirmi "Mancano 0 centesimi" "Il resto e' di TOT centesimi, TOT monete da 5 centesimi e TOT monete da 1 centesimo" mi dice "Mancano -X centesimi" "Il resto e' di TOT centesimi, TOT monete da 5 centesimi e TOT monete da 1 centesimo"
    qualcuno saprebbe come risolvere questo problema?

    Spero che qualcuno mi risponda, mi servirebe entro le 12 di sta serra.

    Grz in anticipo.

    PS: il codice e lo stesso in tutti i casi quindi basta che leggiate solo il primo.
    Ultima modifica di MItaly; 24-11-2013 a 19:54 Motivo: Aggiunti tag CODE

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Molto probabilmente dopo il calcolo

    DIF=Pr-Imp;

    devi semplicemente controllare che DIF non sia minore di 0. Altrimenti lo imposti a 0.

    P.S. Non c'è nulla di urgente, né di urgentissimo nei forum. Tanto meno ci sono risposte entro una certa ora !
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    15
    ok quindi tu dici di mettere un
    if(DIF<0)
    {
    }
    ma come faccio a impostarlo a 0.

    PS:
    Cmq scusa se ho fatto/scritto qualcosa che ti abbia potuto offendere.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Scusa tu non sai come assegnare un valore ad una variabile? E come hai scritto quel programma?


    P.S. Non è questione di offendersi ... nei forum non c'è nulla di urgente e si risponde liberamente, è questa la regola ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    15
    Io ho fato cosi
    codice:
      Imp=Imp+MON;
      DIF=Pr-Imp;
      printf("Mancano %d centesimi\n",DIF);
      if(DIF<0)
      {
       DIF=0;
       printf("Mancano %d centesimi\n",DIF);
      }
    pero facendo cosi mi stampa il primo messagio con il valore sotto 0, e il secondo giusto.

    PS:
    va bene scusami ancora.
    Ultima modifica di MItaly; 24-11-2013 a 19:55 Motivo: tag CODE

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Scusa, per logica, se tu prevedi due messaggi, avrai due messaggi !

    Ne devi prevedere uno solo, dopo e fuori dalla IF
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    15
    Scusa ma continuo a non capire come fare a far venire un unico mex con il numero giusto.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E' impossibile che tu non capisca. Quante printf hai previsto ? Ne devi usare solo una ... mi sembra semplice ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    15
    Ok perfetto, ho risolto.
    Imp=Imp+MON;
    DIF=Pr-Imp;
    if(DIF<0)
    {
    DIF=0;


    }
    printf("Mancano %d centesimi\n",DIF);
    ma scusa, il messagio di printf non si dovrebbe mettere dentro if?

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    15
    grazie mille.

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.