Salta ai contenuti. | Salta alla navigazione

Strumenti personali

19 dicembre 2019 - AM

Fondamenti di Informatica - Compito A

Prof. Marco Gavanelli

19 dicembre 2019

1  Esercizio (punti 16)

La scorsa notte è stato commesso un omicidio; dall'autopsia il medico legale dice che è stato commesso alle ore 23.17. Per avere un'idea di chi potrebbe essere l'assassino, gli investigatori hanno chiesto al gestore telefonico l'elenco di tutti i numeri di cellulari che si sono collegati alla cellula in cui si trova il luogo del delitto.

Il gestore ha fornito un file di testo  cellula.log; esso contiene un elenco di numeri di cellulari, ciascuno con due relativi orari: l'orario in cui il cellulare è entrato nella cellula e l'orario in cui è uscito dalla cellula. Più precisamente, per ogni cellulare si hanno

  • numero di cellulare: stringa contenente al più 12 caratteri, senza spazi
  • ore e minuti di ingresso nella cellula (due interi), ore e minuti di uscita dalla cellula (2 interi).

Il file cellula.log contiene al più 100 elementi, che sono tutti i cellulari entrati in quella cellula nell'arco della giornata.

La polizia vuole restringere l'elenco ai soli cellulari che erano collegati alla cellula all'ora del delitto (le 23.17). Si scriva un programma C che mostra l'elenco dei numeri di cellulari che erano collegati alla cellula nell'ora del delitto.

Si organizzi il programma come segue:

  1. main: nel main, si invochi una funzione di lettura del file cellula.log (da realizzare al punto 2), una di calcolo del risultato (da realizzare al punto 3), infine si visualizzi il risultato tramite una procedura di stampa (da realizzare al punto 5)
  2. lettura cellula.log: la funzione deve leggere il file cellula.log e portarne il contenuto in un opportuno array di strutture. Ogni elemento dell'array è una struttura che contiene 3 campi: numero di cellulare, orario di ingresso (struttura di tipo orario: contenente ore e minuti) e orario di uscita (altra struttura di tipo orario). Si mostri a video il contenuto dell'array.
  3. elaborazione: la funzione di calcolo del risultato ha come parametri
    • l'array letto al punto 2
    più, eventualmente, altri parametri e fornisce al main un array di stringhe, contenente i numeri di cellulare che erano collegati alla cellula nell'ora del delitto. Per fare questo, invoca, per ogni elemento dell'array letto al punto 2, una funzione (da sviluppare al punto 4) che calcola se quel cellulare si trovava nella cellula nell'ora del delitto.
  4. interno: la funzione riceve come parametri tre strutture di tipo orario:
    • gli orari di ingresso e uscita dalla cellula
    • l'ora del delitto
    e fornisce
    • 1 se l'ora del delitto è compresa fra l'orario di ingresso e quello di uscita dalla cellula
    • 0 altrimenti
  5. stampa: la funzione riceve come parametro l'array di stringhe generato al punto 3 (più, eventualmente, altri parametri) e lo visualizza sullo schermo.

È 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)

La polizia ha chiesto al gestore telefonico anche i nomi dei clienti, con i relativi numeri di telefono. Il gestore li ha forniti in un file di testo nomi.txt. Per ogni numero di telefono (al massimo 100) si sanno:

  • numero di telefono: stringa contenente al più 12 caratteri, senza spazi
  • nome, cognome: stringhe contenenti al più 20 caratteri, senza spazi

Si desidera sapere, per ogni numero di cellulare che si trovava nella cellula all'ora del delitto, chi è l'intestatario del numero.

Il file è ordinato per numero di telefono.

Lo studente usi l'algoritmo più efficiente che conosce, considerando che il file è ordinato per numero di telefono.

 

È indispensabile organizzare il programma in opportune procedure e/o funzioni, in particolare aggingendo un numero significativo di funzioni rispetto all'esercizio 1.



Qualora si svolga solo l'esercizio 1, si può svolgere tutto l'esercizio su un unico file.

Qualora si svolga anche l'esercizio 2, 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.