Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Hybrid View

  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 L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quote Originariamente inviata da Elfman Visualizza il messaggio
    ma scusa, il messagio di printf non si dovrebbe mettere dentro if?
    No. La if può non essere eseguita ma printf deve essere sempre eseguita.

    Quella if la puoi scrivere anche così

    if(DIF<0) DIF=0;
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.