RISOLTO [C++] Problema distributore automatico

Gwynbleidd19

Nuovo Utente
11
0
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.
Codice:
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;
}
 
Ultima modifica:

Andretti60

Utente Èlite
4,696
3,279
La funzione pagamento() è sbagliata, devi continuare a sottrarre lo stesso resto finché quello che rimane è inferiore a quel resto.
Per esempio se il prezzo è 1 e immetti 100, devi continuare a dare banconote da 20 finché il resto è superiore a 20, poi lo stesso con il resto di 10 e via dicendo.
 

Gwynbleidd19

Nuovo Utente
11
0
Ho risolto, grazie.
Se a qualcuno può servire ecco il codice:
Codice:
#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};
int ri=0;
struct Prodotto {
    string nome;
    int id;
    float prezzo;
};

void caricamento (Prodotto p[])
{
    for (int i=0; i<ri; i++)
    {
        cout<<"Inserisci il nome del prodotto "<<i<<": "<<endl;
        cin>>p[i].nome;
        cout<<"Inserisci l'id del prodotto "<<i<<": "<<endl;
        cin>>p[i].id;
        cout<<"Inserisci il prezzo del prodotto "<<i<<": "<<endl;
        cin>>p[i].prezzo;
    }
}

void pagamento (float prezzo, float pp)
{
    float 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];
                if (re==soldi[i])
                {
                    re=re-soldi[i];
                    cout<<"Ti do euro: "<<soldi[i]<<endl;
                    break;
                }
            }
        }
    }
    while (re>=0.1);
}

int main ()
{
    int r, pi;
    float pp;
    cout<<"Quanti prodotti vuoi caricare nella macchina?"<<endl;
    cin>>ri;
    Prodotto p[ri];
    system ("pause");
    system ("cls");
    /* 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 0 per caricare i dati degli elementi\n1 per acquistare un prodotto\n2 per uscire dal programma."<<endl;
        cin>>r;
        system ("pause");
        system ("cls");
        switch (r)
        {
            case 0:
                caricamento (p);
                system ("pause");
                system ("cls");
                break;
            case 1:
                for (int i=0; i<ri; i++)
                {
                    cout<<"Digita "<<p[i].id<<" per acquistare "<<p[i].nome<<" (E. "<<p[i].prezzo<<")"<<endl;;
                }
                cin>>pi;
                pi=pi-1;
                {
                    cout<<"Inserisci i seguenti euro: "<<p[pi].prezzo<<endl;
                    cin>>pp;
                    if (pp>=p[pi].prezzo)
                        {
                        pagamento (p[pi].prezzo, pp);
                        system ("pause");
                        system ("cls");
                        break;
                        }
                        else
                        {
                            cout<<"Importo non valido. Riprova."<<endl;
                        }
                        system ("pause");
                        system ("cls");
                }
                break;
            
            case 2:
                cout<<"Sto uscendo..."<<endl;
                break;
        }
    }
    while (r!=2);
    system ("pause");
    return 0;
}
 

Entra

oppure Accedi utilizzando

Hot: E3 2021, chi ti è piaciuto di più?

  • Ubisoft

    Voti: 37 23.1%
  • Gearbox

    Voti: 3 1.9%
  • Xbox & Bethesda

    Voti: 101 63.1%
  • Square Enix

    Voti: 14 8.8%
  • Capcom

    Voti: 7 4.4%
  • Nintendo

    Voti: 21 13.1%
  • Altro (Specificare)

    Voti: 15 9.4%

Discussioni Simili