Salta ai contenuti. | Salta alla navigazione

Strumenti personali

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:

  1. 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.
  2. 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.
  3. estrazione: la funzione di estrazione del messaggio ha come parametri
    • l'array letto al punto 2
    più, eventualmente, altri parametri e fornisce al 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.

  4. 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 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.