Problema con esercizio in C
Salve a tutti , ho un problema con questo esercizio in C :
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 ?
Grazie mille.
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.

