PDA

Visualizza la versione completa : [C] Simulatore distributore bevande


Elfman
24-11-2013, 18:01
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.


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

oregon
24-11-2013, 18:11
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 !

Elfman
24-11-2013, 18:32
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.

oregon
24-11-2013, 18:36
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 ...

Elfman
24-11-2013, 18:47
Io ho fato cosi


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.

oregon
24-11-2013, 18:49
Scusa, per logica, se tu prevedi due messaggi, avrai due messaggi !

Ne devi prevedere uno solo, dopo e fuori dalla IF

Elfman
24-11-2013, 19:03
Scusa ma continuo a non capire come fare a far venire un unico mex con il numero giusto:dh:.

oregon
24-11-2013, 19:05
E' impossibile che tu non capisca. Quante printf hai previsto ? Ne devi usare solo una ... mi sembra semplice ...

Elfman
24-11-2013, 19:24
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?

Elfman
24-11-2013, 19:25
grazie mille.

Loading