Salta ai contenuti. | Salta alla navigazione

Strumenti personali

15 febbraio 2017

Fondamenti di Informatica - Compito A

Prof. Marco Gavanelli

15 febbraio 2017

1  Esercizio (punti 16)

Francesca vuole portare alla festa della scuola delle torte. La nonna le ha dato una ricetta e le ha spedito la lista degli ingredienti via email nel file di testo  ricetta.txt . Per ciascun ingrediente, sono riportati:

  • nome: stringa contenente al massimo 20 caratteri, senza spazi
  • peso: (int) quantità in grammi

Fortunatamente, Francesca ha in casa tutti gli ingredienti; il suo modernissimo frigorifero automatico le fornisce l'elenco di tutti gli alimenti che contiene in un file di testo  ingredienti.txt , in cui ciascun elemento è rappresentato come prima, cioè:

  • nome: stringa contenente al massimo 20 caratteri, senza spazi
  • peso: (int) quantità in grammi

In entrambi i file ci sono al massimo 100 ingredienti.

Francesca vuole sapere quante torte riuscirà a fare; per essere sicura che il programma non si sbagli, vuole anche che visualizzi il nome di un ingrediente per cui le è impossibile fare una torta in più.

Ad esempio, se il file ricetta.txt contiene

Zucchero 300
Burro 100
Farina 350

ed il file ingredienti.txt contiene

Burro 500
Farina 1000
Latte 1000
Zucchero 700

il programma dovrà visualizzare

Si riescono a fare 2 torte.
Non c'e` abbastanza Zucchero per fare 3 torte.

(va bene anche se visualizza "Non c'e` abbastanza Farina per fare 3 torte").

Si strutturi il programma come segue:

  1. nel main , si invochi due volte la stessa funzione di lettura (da sviluppare al punto 2), che dovrà essere invocata sia per leggere il file ricetta.txt sia il file ingredienti.txt ; poi si invochi una procedura o funzione di elaborazione (da implementare al punto 3), infine si stampi il risultato (nel main ).
  2. si scriva la procedura o funzione di lettura; essa legge un file e ne porta il contenuto in un opportuno array di strutture. Si mostri a video il contenuto dell'array.
  3. Si scriva la procedura o funzione che calcola il numero di torte massimo che si riescono a fare con gli ingredienti dati ed il nome di un ingrediente che impedisce di fare una torta in più; la procedura o funzione dovrà comunicare al main
    • il numero di torte massimo che si riescono a fare
    • il nome di un ingrediente che impedisce di fare una torta in più
    Per fare questo, la funzione deve ASSOLUTAMENTE utilizzare almeno un'altra funzione, da implementare. È ASSOLUTAMENTE INDISPENSABILE strutturare opportunamente l'algoritmo in funzioni in questo punto e non fare tutto in un'unica funzione, altrimenti verranno tolti dei punti.

È indispensabile organizzare opportunamente il programma in procedure e funzioni; è quindi altamente consigliabile aggiungere altre procedure/funzioni oltre a quelle indicate esplicitamente nel testo.

2  Esercizio (punti 4)

Si aggiunga al programma una procedura o funzione che calcola quali ingredienti Francesca dovrà acquistare se desidera fare una torta in più. Tale procedura o funzione dovrà creare e fornire al main un array di strutture con gli ingredienti e le quantità da acquistare. Il main dovrà poi invocare una procedura o funzione che stampa l'array prodotto.

Nell'esempio sopra, il programma dovrà visualizzare

Per fare 3 torte e` necessario acquistare:
Zucchero 200
Farina 50

Si noti che il file ingredienti.txt è ordinato in ordine alfabetico per il campo nome dell'ingrediente. Si renda il programma più efficiente considerando il fatto che il file è ordinato.



È indispensabile organizzare il programma in opportune procedure e/o funzioni.

Si consegnino i file:

  • un file COGNOME.c (dove COGNOME va sostituito col cognome dello studente) che contiene il main e le funzioni usate solo nell'esercizio 1
  • un file facoltativo.c che contiene il main e le funzioni usate solo nell'esercizio 2
  • un file funzioni.c che contiene le funzioni comuni

più tutti i file header ritenuti necessari.

Nella correzione, il docente creerà due progetti:

  • in uno, inserirà i file COGNOME.c e funzioni.c . L'eseguibile che viene creato dovrà risolvere l'esercizio 1.
  • nell'altro, inserirà i file facoltativo.c e funzioni.c . L'eseguibile che viene creato dovrà risolvere l'esercizio 2.