Salta ai contenuti. | Salta alla navigazione

Strumenti personali

16 gennaio 2019

Fondamenti di Informatica - Compito \letteracompito

Fondamenti di Informatica e laboratorio modulo A

Prof. Marco Gavanelli

16 gennaio 2019

1  Esercizio (punti 16)

Gli investigatori sono riusciti ad intercettare un messaggio della famigerata banda della Mirandola. Il messaggio è riportato nel file di testo criptato2.txt e contiene al più 1000 caratteri. Purtroppo, però, il messaggio è incomprensibile; dev'essere stato codificato tramite qualche codice.

Fortunatamente, un informatore ha fornito il codice: ogni carattere nel messaggio va sostituito con un altro carattere. Il codice è riportato nel file binario  codice.bin. Il file codice.bin contiene al più 100 elementi; ciascun elemento è una coppia di caratteri:

  • carattere criptato
  • carattere de-criptato

Ad esempio, se il file codice.bin contiene

A T
C N
D A

significa che tutte le 'A' nel messaggio criptato vanno sostituite con delle  'T' nel messaggio decodificato; tutte le 'C' con delle 'N'; tutte le 'D' con delle 'A'. Quindi se il messaggio criptato conteneva "ADCAD" questo va decodificato in "TANTA".

Si scriva un programma C che, usando il codice nel file codice.bin, stampa a video il messaggio decodificato.

Si organizzi il programma come segue:

  1. nel main, si invochi una funzione di lettura del file codice.bin (da realizzare al punto 2), una di decodifica (da realizzare al punto 3), infine si visualizzi il risultato.
  2. la funzione di lettura del file codice.bin deve leggere il file codice.bin e portarne il contenuto in un opportuno array di strutture. Si mostri a video il contenuto dell'array.
  3. la funzione di elaborazione ha come parametri
    • l'array letto al punto 2
    più, eventualmente, altri parametri e fornisce al main una stringa che contiene il messaggio decodificato. Per fare questo, invoca, per ogni posizione n nel messaggio, una funzione (da realizzare al punto 4) che calcola il carattere da riportare in posizione n nella stringa di uscita.
  4. la funzione di calcolo del carattere riceve come parametri
    • l'array letto al punto 2
    • un carattere
    più, eventualmente, altri parametri e fornisce il carattere decodificato. Nel caso il carattere non compaia nell'array letto al punto 2, la funzione restituisce uno spazio.

È 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 noti che il file codice.bin è ordinato per carattere criptato. È quindi possibile rendere più efficiente la ricerca del carattere. Lo studente usi l'algoritmo più efficiente che conosce per effettuare la ricerca, sfruttando il fatto che l'array è ordinato.

 



È indispensabile organizzare il programma in opportune procedure e/o funzioni, in particolare aggiungendo un numero significativo di funzioni rispetto all'esercizio 1. Qualora il numero di funzioni aggiunte non sia ritenuto sufficiente (o l'organizzazione del programma in funzioni non sia ritenuto ragionevole), non sarà possibile ottenere tutti i 4 punti per questo esercizio.



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.