Oppure

Loading
Questo topic e' stato chiuso dal moderatore.
17/02/15 14:05
WildBlood
Premettendo che non pretendo che qualcuno faccia il programma al posto mio, anche perchè non ci capirei nulla, vorrei almeno una base sulla quale costruire tutto il codice, perchè io non so come partire. Avevo pensato di creare una struct e un array di struct di 10 elementi, con le rispettive informazioni. In seguito, sviluppare una funzione che consenta all'utente di inserire un importo, attraverso quindi uno switch, controllare l'importo e in seguito la disponibilità della bibita, e se tutto va bene, prendi la bibita, decrementando il contatore relativo a quella stessa bibita.
In particolare non ho capito l'ultima parte del progetto, cioè quella di calcolare la quantità venduta in un giorno con un algoritmo ricorsivo. Grazie in anticipo a tutti per l'aiuto. :)
PS: Se a breve riuscirò a combinare qualcosa, posto il codice.

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)
Implementazione lÂ’algoritmo per la simulazione del distributore (e.g, struttura
matriciale) ed effettuare almeno un test per ognuna delle opzioni richieste dallÂ’utente.
Ultima modifica effettuata da WildBlood 17/02/15 14:05
aaa
19/02/15 2:32
darioza
Immagino siamo in ambito accademico...
Penso che una volta chiaro il concetto di ricorsività, ammesso e concesso che non necessiti, proprio perché in ambito accademico, di salvare su file o archiviare, quindi hai un array in memoria, le cose da fare siano abbastanza chiare.
Array prodotti, multidimensionale
Array vendite, multidimensionale
Funzione ricorsiva

come sei a c?
Medicina indigesta o lo mangi col pane la mattina?
aaa
19/02/15 6:40
AldoBaldo
Ora non posso perché sto andando al lavoro, ma mi piacerebbe partecipare. Che tempi hai per lo svolgimento?
ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
19/02/15 10:18
WildBlood
Postato originariamente da AldoBaldo:

Ora non posso perché sto andando al lavoro, ma mi piacerebbe partecipare. Che tempi hai per lo svolgimento?


Fino a domani, dovrei farlo vedere al mio prof prima.
aaa
19/02/15 10:24
WildBlood
Postato originariamente da darioza:

Immagino siamo in ambito accademico...
Penso che una volta chiaro il concetto di ricorsività, ammesso e concesso che non necessiti, proprio perché in ambito accademico, di salvare su file o archiviare, quindi hai un array in memoria, le cose da fare siano abbastanza chiare.
Array prodotti, multidimensionale
Array vendite, multidimensionale
Funzione ricorsiva

come sei a c?
Medicina indigesta o lo mangi col pane la mattina?


In pratica noi non abbaimo mai salvato file etc.. quindi suppongo non si debba salvare niente, visto che ma i lo abbiamo fatto. Questo è il punto, non so simulare la gestione annuale.

Questo è il codice che sono riuscito a creare:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// Prototipi di funzioni.
void decrementa_disponibilita_1(int disponibilita);

// Creazione delle STRUCT.
struct bibite {
    char nome[100];
    int codice;
    float prezzo;
    int disponibilita;
};

struct data {
    int mese;
    int giorno;
};

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");
    int i, bibita_scelta, disponibilita;
    float monete_inserite, resto;
    for (i = 0; i < 10; i++) {
        printf("%d - %s\n", array_bibite[i].codice, array_bibite[i].nome);
    }
    printf("(10)Termina la macchina.");

    while (1) {
        printf("\n");
        printf("Scegli una bibita (INSERISCI IL CODICE CORRISPONDENTE):\n");
        scanf("%d", &bibita_scelta);

        if (bibita_scelta == 10) {
            break;
        }

        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;
}

void decrementa_disponibilita_1 (int disponibilita) {
    if (disponibilita == 10) {
        return 1;
    } else {
    }
}



Non saprei come continuare il programma.
Ultima modifica effettuata da WildBlood 19/02/15 10:32
aaa
19/02/15 11:12
darioza
ogni volta che "esce" una bibita, inserisci in un array multidimensionale (l'array della struct per capirci è dell'ala stessa cosa alla fine) data e prodotto scelto.
Se non ho capito male devi poter stampare quante bibite sono state vendute nel tale giorno, giusto?
Prevedi che scrivendo "resoconto" si attivi, al posto della procedura di rilascio della bibita, una funzione ricorsiva, la quale scorre l'array ed estrae i dati che ti servono.
Se non ricordo male vuoi sapere quanti prodotti venduti nella giornata, giusto?
Allora la funzione scorre l'array, ogni volta che incontra una vendita nella data odierna, incrementi un contatore e poi lo mandi alla console.
Era tardi ieri sera, spero di non aver tralasciato nulla.

Edit.
Chiede data e tale prodotto, quindi non basta scrivere "resoconto", bisogna che segua una read che chiede data e codice prodotto

Edit edit
Tranquillo, in ambito accademico non si fa mai grande uso di log testuali, ci si ferma a leggere e inserire qualche riga, quindi nessuna complicazione da lettura e strutturazione log

Ps
Il compito vuole una funzione ricorsiva, mi raccomando...
Non cadiamo in tentazione nell'usare cicli...
Ultima modifica effettuata da darioza 19/02/15 11:17
aaa
19/02/15 11:29
WildBlood
Postato originariamente da darioza:

ogni volta che "esce" una bibita, inserisci in un array multidimensionale (l'array della struct per capirci è dell'ala stessa cosa alla fine) data e prodotto scelto.
Se non ho capito male devi poter stampare quante bibite sono state vendute nel tale giorno, giusto?
Prevedi che scrivendo "resoconto" si attivi, al posto della procedura di rilascio della bibita, una funzione ricorsiva, la quale scorre l'array ed estrae i dati che ti servono.
Se non ricordo male vuoi sapere quanti prodotti venduti nella giornata, giusto?
Allora la funzione scorre l'array, ogni volta che incontra una vendita nella data odierna, incrementi un contatore e poi lo mandi alla console.
Era tardi ieri sera, spero di non aver tralasciato nulla.

Edit.
Chiede data e tale prodotto, quindi non basta scrivere "resoconto", bisogna che segua una read che chiede data e codice prodotto

Edit edit
Tranquillo, in ambito accademico non si fa mai grande uso di log testuali, ci si ferma a leggere e inserire qualche riga, quindi nessuna complicazione da lettura e strutturazione log

Ps
Il compito vuole una funzione ricorsiva, mi raccomando...
Non cadiamo in tentazione nell'usare cicli...


Come faccio a scorrere l'array con una funzione ricorsiva ?! T.T
aaa
19/02/15 12:26
WildBlood
Questo è l'intero codice che sono riuscito a creare.. Andrebbe bene ?! E poi, come faccio a creare la funzione ricorsiva che socrra l'array di struct e calcoli quante bibite sono state vendute ?!
#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 mese;
    int giorno;
    int codice_prodotto;
};

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}};

    // Array di struct per la Data.
    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.
    int i, bibita_scelta;
    int j = 0;
    float monete_inserite, resto;

    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);

    // Giorno e mese. NB: Notazione a puntatori.
    int giorno = time->tm_mday;
    int mese = time->tm_mon + 1;

    while (1) {
        printf("\n");
        printf("Scegli una bibita (INSERISCI IL CODICE CORRISPONDENTE):\n");
        scanf("%d", &bibita_scelta);

        if (bibita_scelta == 10) {
            break;
        }

        if (bibita_scelta == 11) {
            int g, m, c_p;
            printf("Il giorno richiesto:\n");
            scanf("%d", &g);
            printf("Il mese richiesto:\n");
            scanf("%d", &m);
            printf("Il prodotto richiesto:\n");
            scanf("%d", &c_p);
            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");

            // FUNZIONE RICORSIVA...
        }

        // 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.
                array_data[j].giorno = giorno;
                array_data[j].mese = mese;
                array_data[j].codice_prodotto = bibita_scelta;
                j++;

            } 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.
                array_data[j].giorno = giorno;
                array_data[j].mese = mese;
                array_data[j].codice_prodotto = bibita_scelta;
                j++;

            }
        } else {
            printf("CI DISPIACE, MA LA MACCHINA ACCETTA SOLO MONETE DA 0.10, 0.20, 0.50, 1.00.");
        }
    }

    return 0;
}

aaa