20 dicembre 2017 - mattina
Fondamenti di Informatica - Compito A
Prof. Marco Gavanelli
20 dicembre 2017
1 Esercizio (punti 16)
La polizia ha scoperto che la banda della Mirandola sta per effettuare un nuovo crimine. L'investigatore capo è riuscito ad intercettare un messaggio che il capo della banda, detto 'Pico', ha mandato ai suoi complici. Il messaggio, però, è incomprensibile: sembra costituito solo da un elenco di coppie di numeri interi. Il messaggio è riportato in un file di testo messaggio.txt .
Uno degli investigatori, studiando il profilo del capo della banda, ha scoperto che è un grande estimatore della Divina Commedia, un poema suddiviso in capitoli detti "canti". Forse i numeri rappresentano posizioni di parole all'interno della Divina Commedia: il primo intero potrebbe essere il numero del Canto e il secondo il numero della parola!
Ad esempio, la coppia 1 2 rappresenterebbe la seconda parola del canto primo; poiché il primo canto comincia con "Nel mezzo del cammin di nostra vita", la parola sarebbe "mezzo".
Allo stesso modo, 1 6 rappresenterebbe canto 1, sesta parola: la parola "nostra".
Analogamente, poiché il terzo canto inizia con "Per me si va ne la citta` dolente", la coppia 3 3 sarebbe la parola "si".
L'investigatore ha trovato in rete un file di testo inferno.txt che fa proprio al caso suo: per ciascuna parola dell'Inferno (il primo libro della Commedia), riporta:
- canto: intero. Rappresenta il numero del canto in cui la parola si trova
- numero: intero. Rappresenta il numero della parola all'interno del canto
- parola: stringa contenente al più 20 caratteri, senza spazi. Contiene la parola stessa
Il file inferno.txt contiene al più 33000 parole.
A questo punto, per decodificare il messaggio bisognerà creare un programma strutturato come segue:
- nel
main
, si invochi una procedura o funzione di lettura (da realizzare al punto 2) ed una di decodifica (punto 3). - la procedura o funzione di lettura deve leggere il file inferno.txt e portarne il contenuto in un opportuno array di strutture. Si mostri a video l'array
- la procedura o funzione di decodifica deve ricevere come parametri l'array letto al punto 2, più, eventualmente altri parametri, e deve decodificare il messaggio, stampando a video il messaggio decodificato.
Per fare questo, dovrà leggere il file messaggio.txt e, per ciascuna coppia di interi letta dal file, dovrà invocare una procedura o funzione di ricerca; tale procedura o funzione (da implementare al punto 4) dovrà cercare la coppia di interi nell'array di strutture letto al punto 2 e fornire alla procedura o funzione di decodifica la parola corrispondente. La procedura o funzione di decodifica a questo punto mostrerà a video la parola.
- la procedura o funzione di ricerca riceve come parametri
- un intero c che rappresenta il numero di un canto
- un intero n che rappresenta il numero della parola
- l'array letto al punto 2
È 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 supponga ora che il file inferno.txt sia troppo grande per stare in memoria centrale. Si modifichi il programma in modo che non carichi l'intero file in RAM, ma che faccia le ricerche direttamente sul file.
È 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 ilmain
e le funzioni usate solo nell'esercizio 1 - un file
facoltativo.c
che contiene ilmain
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: