|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
[C++] Esercizio gestione pasticceria
Non riesco a risolvere questo esercizio:
Il nostro amico Ciccio Pasticcio e la sua dolce mogliettina Renata Limbranata hanno preso in gestione una pasticceria. Renata prepara i dolci, mentre Ciccio si occupa di prendere le ordinazioni dei clienti e fare la spesa necessaria a Renata per realizzare il dolce così come indicato sul suo libro di ricette. Tuttavia, Ciccio come al solito fa molti pasticci, sbaglia nel prendere le ordinazioni segnando un dolce per un altro e dimentica sempre di comprare qualche ingrediente. Renata, disperata poiché per colpa di Ciccio finora non è riuscita a soddisfare nessun cliente, ci chiede aiuto. A tale scopo si scriva in C++ un programma completo opportunamente modularizzato in funzioni che 1) mostri al cliente l’elenco dei dolci tra cui può scegliere, e ne prenda l’ordinazione; 2) cerchi nel libro di ricette di Renata la ricetta corrispondente al dolce scelto e 3) compili la lista della spesa evitando di aggiungere alla lista ingredienti già presenti nella dispensa. Il libro di ricette è un elenco di stringhe ognuna delle quali ha il seguente formato: Nome della Ricetta. Ingredienti: ingrediente1, ingrediente2, …,ingredienteN. Preparazione: istruzione1, istruzione2, …, istruzioneK. Esempio: un cliente entra nella pasticceria e Ciccio mostra il seguente menù: 1) Torta Al Cioccolato e Panna 2) Tiramisù 3) Bavarese alle Fragole ... Supponiamo che il cliente scelga il Tiramisù. Allora il programma accede nel libro delle ricette alla posizione corrispondente al Tiramisù ed, esaminando la stringa ivi contenuta, ad esempio Tiramisù. Ingredienti: zucchero, uova, biscotti, mascarpone, caffè. Preparazione: unire le uova con lo zucchero, aggiungere il mascarpone, etc. recupera gli ingredienti zucchero, uova, biscotti, mascarpone, caffè, controlla nella dispensa quale di questi è già presente e aggiunge i mancanti nella lista della spesa. Supponendo che nella dispensa siano presenti uova, cioccolato, mascarpone, farina, lievito la lista della spesa dovrà contenere zucchero, biscotti e caffè. Ho provato ad implementare qualcosa e per ora sono riuscito a fare soltanto una funzione che mostri il menu al cliente.. può andare?! sono indeciso su cosa usare per fare questo libro delle ricette... all'inizio avevo pensato ad un array di char ma poi ho dovuto farla diventare una matrice...altrimenti non potevo stampare solo i nomi delle ricette... Poi avrei pensato di fare un'altra funzione che prende in input la scelta(ordinazione) del cliente e che mi dia gli ingredienti di quella determinata ordinazione da inserire poi magari con un altra funzione in un nuovo array di char chiamato "lista della spesa". Fatto questo, penso che bisogna assumere che esista già un array in cui sono inseriti gli ingredienti già in dispensa(almeno credo!) e quindi mi serve una funzione che verifichi se la "listadellaspesa" contiene ingredienti uguali alla "listadelladispensa". Se li contiene dovrebbe eliminarli da "listadellaspesa"... Codice:
void menu(char ricette[][], int dim) {
for(int i=0; ricette[i][j]!= '\0'; i++)
for(int j=0; ricette[i][j]!='.'; i++)
cout<<"menu: "<< ricette[i][j];
}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
up
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1728
|
Scusa ma non ti conviene creare una classe dolce e dentro la organizzi con una stringa per il nome del dolce,un array di stringhe per gli ingredienti (o direttamente una stringa con un separatore tra gli ingredienti),una stringa per le istruzioni,dopodichè ti basta creare un array di dolce ed è fatta.
__________________
i5-9400F + Zalman CNPS 8X Optima|Asus Prime B365M-A|Corsair Vengeance LP 2x8GB DDR4 2666Mhz|Sapphire Radeon RX 580 Pulse Ed. 4GB|Samsung 970 Evo Plus 250GB + OCZ Trion 100 (120GB) + Seagate Barracuda (1.5 TB)|Corsair TX650M|LG 27UD59 27" UHD|Windows 10 Pro| iPhone 17 Pro 256 Gb MBA M3 13" 16/512 GB AW 7 iPad Air 5 | 14 Trattative concluse sul forum, ultime 5 con: robby66,Darius_84,Konrad86,Dolphin69,dream83
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
eh magari
"Purtroppo" sto preparando un esame di FONDAMENTI di c++ ..quindi ancora niente classi! Il programma comprende: costrutti principali del c++, funzioni, array, puntatori.. |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1728
|
nemmeno le struct del C puoi utilizzare?
__________________
i5-9400F + Zalman CNPS 8X Optima|Asus Prime B365M-A|Corsair Vengeance LP 2x8GB DDR4 2666Mhz|Sapphire Radeon RX 580 Pulse Ed. 4GB|Samsung 970 Evo Plus 250GB + OCZ Trion 100 (120GB) + Seagate Barracuda (1.5 TB)|Corsair TX650M|LG 27UD59 27" UHD|Windows 10 Pro| iPhone 17 Pro 256 Gb MBA M3 13" 16/512 GB AW 7 iPad Air 5 | 14 Trattative concluse sul forum, ultime 5 con: robby66,Darius_84,Konrad86,Dolphin69,dream83
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Un corso di fondamenti di C++ che non insegna le classi equivale a un corso di C. |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
ma no dai! per le classi c'è un altro corso..dopo fondamenti...c'è programmazione ad oggetti che va dalle classi in poi... poi ancora c'è algoritmi e strutture dati che va piu' nello specifico..
Ma possibile che non ci sia nessun modo per rappresentare questo "LIBRO DELLE RICETTE" senza usare le classi o struct? |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1728
|
Quote:
__________________
i5-9400F + Zalman CNPS 8X Optima|Asus Prime B365M-A|Corsair Vengeance LP 2x8GB DDR4 2666Mhz|Sapphire Radeon RX 580 Pulse Ed. 4GB|Samsung 970 Evo Plus 250GB + OCZ Trion 100 (120GB) + Seagate Barracuda (1.5 TB)|Corsair TX650M|LG 27UD59 27" UHD|Windows 10 Pro| iPhone 17 Pro 256 Gb MBA M3 13" 16/512 GB AW 7 iPad Air 5 | 14 Trattative concluse sul forum, ultime 5 con: robby66,Darius_84,Konrad86,Dolphin69,dream83
|
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
Non so... tu dici di usare una matrice?E poi come faccio a fare le verifiche?
Cioè come faccio a prendere solo gli ingredienti e metterli in un nuovo array per creare la "lista della spesa"? vi prego... leggete bene e aiutatemiii...sono nei guai e ho poco tempo |
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Apr 2003
Messaggi: 16462
|
Quote:
Ti serve (una tra le possibili soluzioni)
__________________
MICROSOFT : Violating your privacy is our priority |
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
Intendi le liste come strutture dati?? se si non posso usare come detto prima.. posso usare solo array come strutture dati.
Per array indicizzati cosa intendi? E per array con puntatori? questo? char *lista="lista......"; Mi servirebbe qualcosa per inserire un elenco di quel formato: Nome della Ricetta. Ingredienti: ingrediente1, ingrediente2, …,ingredienteN. Preparazione: istruzione1, istruzione2, …, istruzioneK. Sicuramente non ce ne sarà una sola...ma saranno tante frasi del genere per ogni "Nome della Ricetta". cioè ci sarà il tiramisu', la torta ecc...quindi serve un array immenso..boh.. |
|
|
|
|
|
#12 | ||
|
Senior Member
Iscritto dal: Apr 2003
Messaggi: 16462
|
Quote:
Quote:
Puoi usare un tipo enumerativo per elecare tutte le ricette (questo e' un dato di input del problema), e poi usi questi valori come indice per accedere alla voce corrispondente nel array delle ricette da cui recuperi la lista degi ingredienti. Una volta che hai questa lista, prendi ingredient1, ingrediente2, etc... come chiavi di ricerca nella dispensa per verificare se siano o meno presenti. Se ingrediente_k non e' presente nella dispensa la inserisci nella lista della spesa, altrimenti no (visto che e' gia' presente nella dispensa).
__________________
MICROSOFT : Violating your privacy is our priority |
||
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
Quindi devo fare un enumerazione enum ricetta={torta al cioccolato=1; tiramisu=2; ecc..}??? e poi metto questi numeri all'interno di un array di int?come recupero la lista degli ingredienti?
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1728
|
Quote:
__________________
i5-9400F + Zalman CNPS 8X Optima|Asus Prime B365M-A|Corsair Vengeance LP 2x8GB DDR4 2666Mhz|Sapphire Radeon RX 580 Pulse Ed. 4GB|Samsung 970 Evo Plus 250GB + OCZ Trion 100 (120GB) + Seagate Barracuda (1.5 TB)|Corsair TX650M|LG 27UD59 27" UHD|Windows 10 Pro| iPhone 17 Pro 256 Gb MBA M3 13" 16/512 GB AW 7 iPad Air 5 | 14 Trattative concluse sul forum, ultime 5 con: robby66,Darius_84,Konrad86,Dolphin69,dream83
|
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
ma così facendo non si perde il formato richiesto dalla traccia?
Essa dice: Il libro di ricette è un elenco di stringhe ognuna delle quali ha il seguente formato: Nome della Ricetta. Ingredienti: ingrediente1, ingrediente2, …,ingredienteN. Preparazione: istruzione1, istruzione2, …, istruzioneK. Forse vogliono la stringa in un unico array? |
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1728
|
Quote:
__________________
i5-9400F + Zalman CNPS 8X Optima|Asus Prime B365M-A|Corsair Vengeance LP 2x8GB DDR4 2666Mhz|Sapphire Radeon RX 580 Pulse Ed. 4GB|Samsung 970 Evo Plus 250GB + OCZ Trion 100 (120GB) + Seagate Barracuda (1.5 TB)|Corsair TX650M|LG 27UD59 27" UHD|Windows 10 Pro| iPhone 17 Pro 256 Gb MBA M3 13" 16/512 GB AW 7 iPad Air 5 | 14 Trattative concluse sul forum, ultime 5 con: robby66,Darius_84,Konrad86,Dolphin69,dream83
Ultima modifica di Roran : 06-04-2011 alle 10:29. |
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
ho provato a buttare giù il codice completo..naturalmente non compila e ho parecchi dubbi:
inizio con quello sulla matrice di puntatori char *ricette[][]..va messo un solo asterisco? va allocata dinamicamente? ecco il codice.. Non finirò mai di ringraziare chi mi risolverà la questione Codice:
#include <iostream>
using namespace std;
void menu(char *ricette[][], int m, int n); //stampa il menu
int posizione_ricetta(char *[][], int); //stampa posizione ricetta in base all'ordinazione
void compilaspesa(char *[][], int, char*[],int); //compila lista della spesa
int main(){
const int m=100, n=3, dim_disp=50;
char *ricette[m][n]={{"tiramisu","zucchero-uova-biscotti-mascarpone-caffè.","unire uova con zucchero,aggiungere mascarpone"},
{"torta al cioccolato", "zucchero-uova-panna-cacao.","unire uova,aggiungere panna"}
{"bavarese", "zucchero-uova-cacao.","unire uova,aggiungere cacao"}};
char *dispensa[dim_disp]={"uova","zucchero","panna","cacao"};
cout<<"salve, ecco il menu dei dolci"<<endl;
menu(ricette,m,n);
compilalistaspesa(ricette,m,n,dispensa,dim_disp);
return 0;
}
void menu(char *ricette[][], int m, int n){
char ordinazione[20];
for(int i=0; i<m; i++)
cout<<ricette[i][0];
cout<<"cosa si desidera ordinare?"<<endl; cin>>ordinazione;
}
int posizione_ricetta(char *[][], int){
int posizione_ricetta=0;
for(int i=0; i<m; i++){
if(ordinazione==ricette[i][0])
posizione_ricetta=i;
}
return posizione_ricetta;
}
void compilaspesa(char *[][], int, char*[],int){
char *listaspesa[50];
posizione_ricetta(ricette, m);
while(ricette[posizione_ricetta][1] != '.'){//ho usato un terminatore punto per gli ingredienti
for(int i=0; ricette[posizione_ricetta][1]!= '-'; i++){
if(ricette[posizione_ricetta][1] != dispensa[i])
listaspesa[i]=ricette[posizione_ricetta][1];
}//for
}//while
}
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:00.











14 Trattative concluse sul forum, ultime 5 con: robby66,Darius_84,Konrad86,Dolphin69,dream83









