Salta ai contenuti. | Salta alla navigazione

Strumenti personali

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:

 

  1. 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).
  2. 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.
  3. 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.
  4. la funzione durata prende in ingresso
    • l'array letto al punto 2,
    • un giorno della settimana ( int )
    (più, eventualmente, altri parametri) e dovrà restituire il numero di ore di permanenza in facoltà degli studenti nel giorno dato.

 

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 il main e le funzioni usate solo nell'esercizio base
  • un file facoltativo.c che contiene il main e le funzioni usate solo nell'esercizio facoltativo

più tutti i file header ritenuti necessari.