Progetto Distributore

di il
12 risposte

Progetto Distributore

Salve e buongiorno a tutti !

Ho questo progetto da fare :

Si vuole simulare la gestione annuale di un distributore automatico di bibite. Si
suppone di avere 10 prodotti identificati da un nome, da un codice identificativo
e da un prezzo.
Permettere all’utente di:
• Di inserire dei soldi (10, 20, 50 centesimi, 1 euro) e scegliere un
prodotto
o In base al costo verificare se è possibile prendere il prodotto
o Verificare se c’è bisogno di dare del resto
• Data una data e un prodotto calcolare la quantità venduta nel giorno di
riferimento (usare un algoritmo incrementale ricorsivo)


attualmente ho fatto questo :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
 
// Creazione delle STRUCT.
struct bibite {
    char nome[100];
    int codice;
    float prezzo;
    int disponibilita;
};
 
struct data {
    int giorno;
    int mese;
    int codice;
};
 
int main()
{
    // Creazione del distributore.
    typedef struct bibite Bibite;
    Bibite array_bibite[10] = {{"Coca-Cola", 0, 0.60, 10},
                              {"Sprite", 1, 0.50, 10},
                              {"RedBull", 2, 1.00, 10},
                              {"Burn", 3, 1.00, 10},
                              {"Fanta", 4, 0.20, 10},
                              {"PowerRade", 5, 1.00, 10},
                              {"Energy", 6, 0.50, 10},
                              {"San Pellegrino", 7, 1.00, 10},
                              {"Pepsi", 8, 0.50, 10},
                              {"Gatorade", 9, 1.00, 10}};
 
    typedef struct data Data;
    Data array_data[365];
 
    // Scelta di una bibita da parte dell'utente.
    printf("Sono presenti le seguenti bibite:\n");
 
    // Dichiarazione delle variabili.
    float monete_inserite, resto;
    int i, bibita_scelta;
    int j = 0;
 
    for (i = 0; i < 10; i++) {
        printf("%d - %s\n", array_bibite[i].codice, array_bibite[i].nome);
    }
    printf("\n");
    printf("(10)Termina la macchina.\n");
    printf("(11)Resoconto.");
 
    // Trova la data di oggi.
    time_t t = time(NULL);
    struct tm *time;
    time = localtime(&t);
    int giorno = time->tm_mday;
    int mese = time->tm_mon;
 
    while (1) {
        printf("\n");
        printf("Scegli una bibita (INSERISCI IL CODICE CORRISPONDENTE):\n");
        scanf("%d", &bibita_scelta);
 
        if (bibita_scelta == 10) {
            printf("Operazioni eseguite: %d", j);
            break;
        }
 
        if (bibita_scelta == 11) {
            int giorno_1, codice_1;
            printf("Il giorno richiesto:\n");
            scanf("%d", &giorno_1);
            printf("Il prodotto richiesto:\n");
            scanf("%d", &codice_1);
            break;
        }
 
        if (bibita_scelta != 10 && bibita_scelta != 11) {
            printf("Hai scelto di prelevare %s", array_bibite[bibita_scelta].nome);
            printf("\n");
            printf("Inserisci delle monete (0.10, 0.20, 0.50, 1.00):\n");
            scanf("%f", &monete_inserite);
            printf("\n");
        }
 
        // Controllo se è possibile ricevere la bibita.
        if (monete_inserite == 0.10 || monete_inserite == 0.20 || monete_inserite == 0.50 || monete_inserite == 1.00) {
            if (monete_inserite < array_bibite[bibita_scelta].prezzo) {
                printf("NON HAI ABBASTANZA CREDITO PER AVERE LA BIBITA SCELTA.\n");
            } else if (monete_inserite == array_bibite[bibita_scelta]. prezzo) {
                printf("STAI PER AVERE LA BIBITA SCELTA.\nGRAZIE.\n");
                printf("(Nessun resto da dare).");
 
                // Inserisci la data di oggi nell'array di struct.
                j++;
                array_data[j].giorno = giorno;
                array_data[j].mese = mese;
                array_data[j].codice = bibita_scelta;
            } else if (monete_inserite > array_bibite[bibita_scelta].prezzo) {
                printf("STAI PER RICEVERE LA BIBITA SCELTA.\nGRAZIE.\n");
                resto = monete_inserite - array_bibite[bibita_scelta].prezzo;
                printf("(Resto da ricevere: %f).", resto);
 
                // Inserisci la data di oggi nell'array di struct.
                j++;
                array_data[j].giorno = giorno;
                array_data[j].mese = mese;
                array_data[j].codice = bibita_scelta;
            }
        } else {
            printf("CI DISPIACE, MA LA MACCHINA ACCETTA SOLO MONETE DA 0.10, 0.20, 0.50, 1.00.");
        }
    }
    return 0;
}

Adesso devo costruire la funzione ricorsiva che permetta il calcolo delle bibite vedute in un singolo giorno ..

Qualche suggerimento ? Premetto che le funzioni ricorsive non le ho capite appieno ...

Ringrazio in anticipo

12 Risposte

  • Re: Progetto Distributore

    A mio avviso c'è un errore di fondo nella struttura dati che salva le varie "scelte", con
    Data array_data[365];
    ti tieni traccia delle ultime 365 "scelte" che potrebbero essere anche state fatte tutte lo stesso giorno!
    Probabilmente quello che vuole il professore è l'utilizzo, per lo storico, di una struttura dati che avete studiato
  • Re: Progetto Distributore

    Facendo mente locale, non ricordo una struttura dati particolare che abbiamo studiato ...

    Secondo te come dovrei fare allora ?
  • Re: Progetto Distributore

    Quali strutture dati avete studiato?
  • Re: Progetto Distributore

    Record e Array
  • Re: Progetto Distributore

  • Re: Progetto Distributore

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
     
    // Creazione delle STRUCT.
    struct bibite {
        char nome[100];
        int codice;
        float prezzo;
        int disponibilita;
    };
     
    int main()
    {
        // Creazione del distributore.
        typedef struct bibite Bibite;
        Bibite array_bibite[10] = {{"Coca-Cola", 0, 0.60, 10},
                                  {"Sprite", 1, 0.50, 10},
                                  {"RedBull", 2, 1.00, 10},
                                  {"Burn", 3, 1.00, 10},
                                  {"Fanta", 4, 0.20, 10},
                                  {"PowerRade", 5, 1.00, 10},
                                  {"Energy", 6, 0.50, 10},
                                  {"San Pellegrino", 7, 1.00, 10},
                                  {"Pepsi", 8, 0.50, 10},
                                  {"Gatorade", 9, 1.00, 10}};
     
        // Scelta di una bibita da parte dell'utente.
        printf("Sono presenti le seguenti bibite:\n");
     
        // Dichiarazione delle variabili.
        float monete_inserite, resto;
        int i, bibita_scelta;
        int j = 0;
     
        for (i = 0; i < 10; i++) {
            printf("%d - %s\n", array_bibite[i].codice, array_bibite[i].nome);
        }
        printf("\n");
        printf("(10)Termina la macchina.\n");
        printf("(11)Resoconto.");
     
         while (1) {
            printf("\n");
            printf("Scegli una bibita (INSERISCI IL CODICE CORRISPONDENTE):\n");
            scanf("%d", &bibita_scelta);
     
            if (bibita_scelta == 10) {
                printf("Operazioni eseguite: %d", j);
                break;
            }
     
            if (bibita_scelta == 11) {
                int giorno_1, codice_1;
                printf("Il giorno richiesto:\n");
                scanf("%d", &giorno_1);
                printf("Il prodotto richiesto:\n");
                scanf("%d", &codice_1);
                break;
            }
     
            if (bibita_scelta != 10 && bibita_scelta != 11) {
                printf("Hai scelto di prelevare %s", array_bibite[bibita_scelta].nome);
                printf("\n");
                printf("Inserisci delle monete (0.10, 0.20, 0.50, 1.00):\n");
                scanf("%f", &monete_inserite);
                printf("\n");
            }
     
            // Controllo se è possibile ricevere la bibita.
            if (monete_inserite == 0.10 || monete_inserite == 0.20 || monete_inserite == 0.50 || monete_inserite == 1.00) 
    		{
                if (monete_inserite < array_bibite[bibita_scelta].prezzo) 
    			{
                    printf("NON HAI ABBASTANZA CREDITO PER AVERE LA BIBITA SCELTA.\n");
                } 
    			else if (monete_inserite == array_bibite[bibita_scelta]. prezzo)
    			{
                    printf("STAI PER AVERE LA BIBITA SCELTA.\nGRAZIE.\n");
                    printf("(Nessun resto da dare).");
                } 
    			else if (monete_inserite > array_bibite[bibita_scelta].prezzo) 
    			{
                    printf("STAI PER RICEVERE LA BIBITA SCELTA.\nGRAZIE.\n");
                    resto = monete_inserite - array_bibite[bibita_scelta].prezzo;
                    printf("(Resto da ricevere: %f).", resto);
                }
            } 
    		else  
    		{ 
                  printf("CI DISPIACE, MA LA MACCHINA ACCETTA SOLO MONETE DA 0.10, 0.20, 0.50, 1.00.");
            }
        }
        return 0;
    }
    
    Comunque ho un altro problema ...
    Ovvero , quando inserisco le monete da 0.10 e 0.20 , il distributore dovrebbe rispondere che non ho sufficiente credito (a parte per la Fanta) ... Invece mi risponde sempre che il distributore accetta solo monete da 0.10,0.20,0.50,1.00 ...
    mentre con 0.50 e 1.00 funziona normalmente ...

    dove sbaglio ???
  • Re: Progetto Distributore

    Quest'ultima cosa l'ho risolta ...

    Adesso devo costruire la funzione ricorsiva ...
  • Re: Progetto Distributore

    UP
  • Re: Progetto Distributore

    UP
  • Re: Progetto Distributore

    Ma non hai seguito i buoni consigli di Template su pierotofy.it? Avevi detto di aver capito e quasi risolto...
  • Re: Progetto Distributore

    Continuo a bloccarmi ... e non volevo rompere le scatole solo a lui
  • Re: Progetto Distributore

    E quindi hai deciso di non rispettare il regolamento di questo sito? vedi tematica cross posting.

    Questo Thread lo chiudo, per la prossima volta ti invito a leggere il regolamento
Devi accedere o registrarti per scrivere nel forum
12 risposte