codice:
#include <stdio.h>
#include <string.h>
typedef struct {
char nome[11];
int qta;
} ingrediente;
typedef struct {
char nome[21];
ingrediente ingredienti[4];
int ningr;
} ricetta;
int caricaricette(ricetta*);
int quantita(ricetta*, char[], int);
void interseca(ricetta*, char[], char[], int);
void main()
{
ricetta ricette[20];
int qtaRic, qtaTot;
char ingrRicerca[11], ric1[21], ric2[21];
qtaRic=caricaricette(ricette);
printf("Ricette inserite %d\n", qtaRic);
printf("Inserire il nome di un ingrediente da ricercare\n");
scanf("%s", ingrRicerca);
qtaTot=quantita(ricette, ingrRicerca, qtaRic);
printf("Ingrediente ricercato %s e quantita totale necessaria per
tutte le ricette inserite %d\n", ingrRicerca, qtaTot);
printf("Inserire il nome della prima ricetta da intersecare\n");
scanf("%s", ric1);
printf("Inserire il nome della seconda ricetta da intersecare\n");
scanf("%s", ric2);
interseca(ricette, ric1, ric2, qtaRic);
getchar();
getchar();
}
int caricaricette(ricetta *ric)
{
int i=0, continua=1,j;
do
{
printf("Inserimento di una ricetta\n");
printf("Inserire nome ricetta\n");
scanf("%s", ric[i].nome);
j=0;
while(continua)
{
printf("Inserire nome del %d ingrediente\n", j+1);
scanf("%s", ric[i].ingredienti[j].nome);
printf("Inserire qta dell'ingrediente %d\n",j+1);
scanf("%d", &ric[i].ingredienti[j].qta);
j++;
printf("Inserire un altro ingrediente? 0=No, 1=Si\n");
scanf("%d", &continua);
}
continua=1;
ric[i].ningr=j;
printf("Inserire un altra ricetta? 0=No, 1=Si\n");
scanf("%d", &continua);
i++;
}while(continua && i<20);
return i;
}
int quantita(ricetta *ric, char nomeIng[], int qtaRic)
{
int i,j, trovato, qtaTot=0;
for(i=0; i<qtaRic; i++)
{
trovato=0;
for(j=0; j<ric[i].ningr && !trovato; j++)
{
if(strcmp(ric[i].ingredienti[j].nome, nomeIng)==0)
{qtaTot+=ric[i].ingredienti[j].qta;
trovato=1;}
}
}
return qtaTot;
}
void interseca(ricetta *ric, char ric1[], char ric2[], int qtaRic)
{
int i, j, k, trovato=0, m, find=0;
for(i=0; i<qtaRic && !trovato; i++)
{
if(strcmp(ric[i].nome, ric1)==0)
trovato=1;
}
trovato=0;
for(j=0; j<qtaRic && !trovato; j++)
{
if(strcmp(ric[j].nome, ric2)==0)
trovato=1;
}
trovato=0;
i=i-1;
j=j-1;
printf("Ingredienti in comune:\n");
for(k=0, m=0; k<ric[i].ningr && m<ric[j].ningr;)
{
if(strcmp(ric[i].ingredienti[k].nome,
ric[j].ingredienti[m].nome)==0)
{printf("%s\n", ric[i].ingredienti[k].nome);
m++;
k++;
find++;
}
else{
if(strcmp(ric[i].ingredienti[k].nome,
ric[j].ingredienti[m].nome)<0)
k++;
else
m++;
}
}
if(find==0)
printf("Nessun Ingrediente in comune\n");
}
perchè in questo caso nella funzione quantità e nella procedura interseca ha passato il parametro ricetta in questo modo? eppure entrambe non modificano la ricetta ma operano al suo interno per cercare la quantità di un suo ingrediente o per dire cosa due ricette hanno in comune!