19 febbraio 2020
Fondamenti di Informatica e Laboratorio modulo A - Compito A
Prof. Marco Gavanelli
19 febbraio 2020
1 Esercizio (punti 16)
La polizia è riuscita ad intercettare un altro messaggio della famigerata Banda della Mirandola; il messaggio è riportato nel file di testo conversazioni.txt. Probabilmente i malfattori stanno organizzando qualche crimine, ma il messaggio che hanno mandato sembra del tutto innocuo: si tratta di un brano di un'opera del Carducci. L'unica cosa che pare essere stata modifica sono le lettere maiuscole: sembra che le lettere maiuscole siano sparse un po' a caso nel documento.
L'ispettore Ridolfi pensa che il messaggio sia proprio nascosto all'interno delle lettere maiuscole; dalla sua ipotesi, le uniche parole significative sono quelle che contengono almeno una lettera maiuscola all'interno.
Per questo, ha richiesto di scrivere un programma C che legga il file conversazioni.txt e produca una stringa che contiene tutte le parole che contengono almeno una lettera maiuscola.
Ad esempio, se il file conversazioni.txt contiene:
"non lasciamo che Ci travolgano i sentimenti: vedIamo e teniamo sempre presente qual e` l'obiettivo, aL fine di non sprecare energie, come invece fece agostino in un bAR ALLE pendici dei seDIci monti."
il programma dovrà produrre la stringa:
"Ci vedIamo aL bAR ALLE seDIci"
Si dovrà organizzare il software come segue:
- main: nel
main
, si invochi una funzione di lettura del file conversazioni.txt (da realizzare al punto 2), una di estrazione del messaggio nascosto (da realizzare al punto 3), infine si visualizzi il messaggio nascosto. - lettura conversazioni.txt: la funzione deve leggere il file conversazioni.txt e portarne il contenuto in un opportuno array di stringhe; ciascuna stringa deve contenere una parola del file. Si sa che le parole nel testo contengono al più 20 caratteri ciascuna (incluso il terminatore) e nel file ci sono al più 2000 parole. Si mostri a video il contenuto dell'array.
- estrazione: la funzione di estrazione del messaggio ha come parametri
- l'array letto al punto 2
main
una stringa che contiene il messaggio nascosto, ovvero la concatenazione di tutte le parole dell'array che contengono almeno una lettera maiuscola.Per fare questo, invoca, per ogni parola nell'array letto al punto 2, una funzione (da sviluppare al punto 4) che verifica se la parola in questione contiene almeno una lettera maiuscola.
- maiuscola: la funzione riceve come parametro una stringa e fornisce
- 1 se la parola contiene almeno una lettera maiuscola
- 0 altrimenti (se la stringa non contiene lettere maiuscole)
Non è necessario per la soluzione del problema, comunque forniamo il codice ASCII delle lettere dell'alfabeto, in caso qualche studente si trovi meglio a lavorare con il codice ASCII dei caratteri.
Codice | Carattere |
65 | A |
66 | B |
67 | C |
68 | D |
69 | E |
70 | F |
71 | G |
72 | H |
73 | I |
74 | J |
75 | K |
76 | L |
77 | M |
78 | N |
79 | O |
80 | P |
81 | Q |
82 | R |
83 | S |
84 | T |
85 | U |
86 | V |
87 | W |
88 | X |
89 | Y |
90 | Z |
91 | [ |
92 | \ |
93 | ] |
94 | |
95 | _ |
96 | ` |
97 | a |
98 | b |
99 | c |
100 | d |
101 | e |
102 | f |
103 | g |
104 | h |
105 | i |
106 | j |
107 | k |
108 | l |
109 | m |
110 | n |
111 | o |
112 | p |
113 | q |
114 | r |
115 | s |
116 | t |
117 | u |
118 | v |
119 | w |
120 | x |
121 | y |
122 | z |
È 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)
Visto il successo del programma di decodifica del messaggio, la polizia ha deciso di mandare un falso messaggio ai membri della banda, usando lo stesso metodo, in modo da tranquillizzarli e riuscire ad arrestarli più facilmente. Ha quindi prodotto un file conversazionimin.txt che contiene il testo dell'opera di Carducci tutto in minuscolo (per semplicità, sono stati anche rimossi tutti i simboli di punteggiatura) e un file risposta.txt, che contiene il messaggio che si desidera mandare ai membri della banda.
Si desidera produrre un file codificato.txt che contiene le stesse parole del file conversazionimin.txt, in cui però le parole che compaiono nel file risposta.txt sono riportate con l'iniziale maiuscola.
Ad esempio, se il file conversazionimin.txt contiene
se non va avanti la barca va avanti la nave e tutto va bene troviamoci al fine di essere sempre uniti ed evitiamo di saltare dal ponte
e il file risposta.txt contiene
va bene troviamoci al ponte
allora il programma dovrà scrivere nel file codificato.txt:
se non Va avanti la barca va avanti la nave e tutto va Bene Troviamoci Al fine di essere sempre uniti ed evitiamo di saltare dal Ponte
In questo modo, quando i membri della banda eseguiranno la loro versione del programma (come nell'esercizio 1), vedranno visualizzato il messaggio contenuto nel file risposta.txt , ovvero
Va Bene Troviamoci Al Ponte
È 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 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: