Si vuole realizzare una versione elettronica di un ricettario.
Il programma deve identificare queli sono le ricette cucinabili dato il conenuto del frigo.
Il programma accede a due file :
1) un file di testo (ricetta.txt) contenente tutti gli ingredienti per tutte le ricette secondo il seguente formato .
_ogni riga è nella forma : ricetta ingrediente quantita'
_ricetta è una stringa (max 20 caratteri)che indica il nome della ricetta
_ingrediente è una stringa (max 20 caratteri)che indica il nome dell ingrediente
_quantita' è un numero reale che indica la quantita' di tale ingrediente nella ricetta corrispondente
_sia ingrediente sia ricetta sono ripetuti piu' volte ma sempre in associazione a ricette o ingredienti diversi
2)un file di testo (frigo.txt) che rappresenta il contenuto del frigo in questo formato :
_ogni riga è nella forma : ingrediente quantita'
_ingrediente corrisponde ad uno degli ingredienti presenti nel file delle ricette
_quantita' è un numero che indica la quantita' di tale ingrediente nel frigo
_ogni ingrediente è presente una sola volta in questo file
_non è noto a priori il numero di righe del file né l ordine.
Il programma legge da tastiera il nome del file contenente la disponibilita' del frigorifero ed il nome di una ricetta e deve fornire in output l elenco degli ingredienti della ricetta (con l indicazione se è disponibile o meno e l indicazione finale se la ricetta puo' essere preparata.
La mia soluzione è questa qui , mi dite se per voi va bene o c è qualcosa che non va ?
- Codice: Seleziona tutto
#include <stdio.h>
#include <string.h>
#define MAX 100
struct cucinare {
char ricetta[20];
char ingrediente[20];
float quantita;
};
struct frigo {
char ingrediente[20];
float quantita;
};
struct cucinare cibo[MAX];
struct frigo dispensa[MAX];
FILE *file;
int i;
char nomeFile[20];
char nomeRicetta[20];
int numRighe1=0;
int numRighe2=0;
int j;
int contaRighe(char *nomeFile, int *numRighe)
{
FILE *file;
int conta_righe=0;
char c[200]; //stringa di appoggio
file=fopen(nomeFile, "r");
while(fgets(c, 200, file) != NULL)
conta_righe++;
fclose(file);
*numRighe=conta_righe;
}
char vettore(char nomeRicetta[20])
{
file=fopen("ricetta.txt", "r");
contaRighe("ricetta.txt", &numRighe1);
for(i=0;i<numRighe1;i++)
fscanf(file, "%s %s %f", cibo[i].ricetta, cibo[i].ingrediente, &cibo[i].quantita);
fclose(file);
file=fopen("frigo.txt", "r");
contaRighe("frigo.txt", &numRighe2);
for(i=0; i<numRighe2;i++)
fscanf(file, "%s %f", dispensa[i].ingrediente, &dispensa[i].quantita);
fclose(file);
for(i=0; i<numRighe1; i++) {
if(strcmp(cibo[i].ricetta, nomeRicetta) == 0) {
for(j=0; j<numRighe2; j++) {
if(strcmp(dispensa[j].ingrediente, cibo[i].ingrediente) == 0) {
if(dispensa[j].quantita>=cibo[i].quantita)
printf("-%s: OK\n", dispensa[j].ingrediente);
else {
printf("-%s: richiesto %.1f, disponibile %.1f\n", dispensa[j].ingrediente, cibo[i].quantita, dispensa[j].quantita);
printf("Impossibile preparare la ricetta.\n");
}
}
}
}
}
}
int main()
{
printf("Inserisci il nome del file che contiene la disponibilità del frigo\n");
printf("e il nome della ricetta che desideri preparare:\n");
scanf("%s %s", nomeFile, nomeRicetta);
printf("Per preparare \"%s\" servono i seguenti ingredienti:\n", nomeRicetta);
vettore(nomeRicetta);
return 0;
}
Grazie mille.

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)






