Salve a tutti, è da stamattina che tento di comprendere il motivo per cui questo programma di cui vi lascio il codice + consegna sotto non funziona. Ho eseguito anche la tavola di verità e risulta corretta, mentre il codice in C++ non ne vuole sapere di funzionare .
Il problema risiede nella procedura pagamento, praticamente quello che ho pensato è di andare a sottrarre i valori dell'array soldi al resto finché non diventa zero. Così facendo il resto diventa 0 e nel mentre ad ogni ciclo stampo quale moneta/banconota la macchina sta rilasciando all'utente.
Il problema è che quando il resto diventa 0.1 non me lo sottrae con il 0.1 nell'array.
Spero vivamente in un vostro aiuto. Grazie in anticipo.
Questo è il programma:
/* Costruire tramite C++ un software che permette di gestire un distributore
automatico di qualsiasi tipo: gelati, snack, caffé, bibite ecc...
Il distributore accetta tutte le monete da 10 centesimi a 2 euro e le banconote da
5, 10 e 20 euro.
Scegliere 5 referenze (di prova) e impostare un prezzo di vendita per ognuna. Quando un cliente
acquista una referenza viene chiesto di inserire monete o banconote, e dopo l'erogazione
vengano calcolate, eventualmente, il taglio delle monete da restituire come resto.
Consegnare inoltre la documentazione. */
#include <iostream>
#include <string>
using namespace std;
float soldi [8]={0.1, 0.2, 0.5, 1.0, 2.0, 5.0, 10.0, 20.0};
struct Prodotto {
string nome;
float prezzo;
};
pagamento (float prezzo, float pp)
{
double re=pp-prezzo;
do
{
for (int i=7; i>=0; i--)
{
if (soldi[i]<=re)
{
cout<<"Ti do euro: "<<soldi[i]<<endl;
re=re-soldi[i];
}
}
}
while (re!=0);
cout<<re<<endl;
}
int main ()
{
int r, pi;
float pp;
Prodotto p1, p2, p3, p4, p5;
p1.nome="Gelato";
p1.prezzo=1;
p2.nome="Acqua";
p2.prezzo=0.5;
p3.nome="Coca-Cola";
p3.prezzo=1.5;
p4.nome="Cicche";
p4.prezzo=0.2;
p5.nome="Merendina";
p5.prezzo=1.9;
do {
cout<<"Digita 1 per acquistare un prodotto\n2 per uscire dal programma."<<endl;
cin>>r;
switch (r)
{
case 1:
cout<<"Digita 1 per acquistare "<<p1.nome<<"\n2 per acquistare "<<p2.nome<<"\n3 per acquistare "<<p3.nome<<"\n4 per acquistare "<<p4.nome<<"\ne 5 per acquistare "<<p5.nome<<endl;
cin>>pi;
switch (pi)
{
case 1:
cout<<"Inserisci euro: "<<p1.prezzo<<": ";
cin>>pp;
pagamento (p1.prezzo, pp);
system ("pause");
system ("cls");
break;
case 2:
cout<<"Inserisci euro: "<<p2.prezzo<<": ";
cin>>pp;
pagamento (p2.prezzo, pp);
system ("pause");
system ("cls");
break;
case 3:
cout<<"Inserisci euro: "<<p3.prezzo<<": ";
cin>>pp;
pagamento (p3.prezzo, pp);
system ("pause");
system ("cls");
break;
case 4:
cout<<"Inserisci euro: "<<p4.prezzo<<": ";
cin>>pp;
pagamento (p4.prezzo, pp);
system ("pause");
system ("cls");
break;
case 5:
cout<<"Inserisci euro: "<<p5.prezzo<<": ";
cin>>pp;
pagamento (p5.prezzo, pp);
system ("pause");
system ("cls");
break;
}
break;
case 2:
cout<<"Sto uscendo..."<<endl;
break;
}
}
while (r!=2);
system ("pause");
return 0;
}