21 dicembre 2011 pomeriggio
Fondamenti di Informatica modulo A
Prof. Marco Gavanelli
21 dicembre 2011
Esercizio (punti 16)
Un file binario orario.bin contiene l'orario delle lezioni di un corso di laurea (al massimo 100). Per ciascuna lezione, il file contiene le seguenti informazioni:
- nome del corso, stringa contenente al massimo 20 caratteri, compreso il terminatore
- giorno della settimana (
int
da 1 a 5, che rappresenta i giorni da lunedì a venerdì) - ora di inizio della lezione (
int
) - ora di fine (
int
)
Si desidera sapere qual è il giorno in cui gli studenti devono trascorrere più tempo all'università, inteso come la differenza fra l'ora di inizio della prima lezione e quella di fine dell'ultima.
Ad esempio, se il file orario.bin contiene le seguenti informazioni:
Informatica | 1 | 16 | 18 |
Informatica | 2 | 16 | 18 |
Analisi | 1 | 8 | 11 |
Analisi | 2 | 14 | 16 |
Geometria | 2 | 10 | 13 |
il giorno in cui gli studenti passano più tempo all'Università è il giorno 1 (lunedì), in quanto iniziano la prima lezione alle 8 e terminano l'ultima alle 18 (10 ore di permanenza all'Università). Il giorno 2 (martedì), invece, iniziano alle 10 e terminano alle 18 (8 ore di permanenza).
Si usi il seguente algoritmo:
- Nel
main
, si invochi una funzione di lettura (punto 2) e una di elaborazione (punto 3), poi si stampi il risultato (il giorno con massima permanenza). - Si scriva una funzione di lettura, che legge il file orario.bin e ne porta il contenuto in un opportuno array di strutture. Si visualizzi a video il contenuto dell'array.
- La funzione elabora dovrà prendere in ingresso l'array letto al punto 2 (più, eventualmente, altri parametri) e restituire il giorno con massima permanenza. Per fare questo, dovrà invocare, per ogni giorno della settimana, la funzione
durata
, da definire al punto 4. - la funzione
durata
prende in ingresso- l'array letto al punto 2,
- un giorno della settimana (
int
)
Facoltativo (punti 4)
Si supponga ora che non sia possibile portare tutto il file in memoria centrale; si modifichi quindi il programma in modo che non usi array di strutture, ma che legga dal file un elemento alla volta.
Si utilizzi un tipo di dato enumerativo per rappresentare i giorni.
Si renda il programma più efficiente, sapendo che il file è ordinato per il campo giorno.
Si consegnino i file:
- un file
funzioni.c
che contiene le funzioni comuni - un file
main.c
che contiene ilmain
e le funzioni usate solo nell'esercizio base - un file
facoltativo.c
che contiene ilmain
e le funzioni usate solo nell'esercizio facoltativo
più tutti i file header ritenuti necessari.