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!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"); }