Università di Roma ``La Sapienza''
Facoltà di Ingegneria
Corso di Fondamenti di Informatica
Corsi di Laurea: Aerospaziale, Chimica, Elettrica, Materiali, Nucleare, Ambiente e Territorio (v.p.)

Appello del 16/9/1999 -- 1a prova scritta
tempo a disposizione: 2 ore

Problema 1 (18 punti) Una spia invia al suo capo messaggi composti di sole lettere maiuscole, senza spazi né segni di interpuzione. Prima di inviare un messaggio, la spia lo trasforma usando un codice crittografico. Il codice crittografico, rappresentato in un file, è composto da una sequenza di linee, dove ogni linea ha il formato:

L XYZ

dove L, X, Y e Z sono lettere maiuscole dell'alfabeto inglese. L'ovvio significato del codice è che la lettera L deve essere tradotta con la sequenza di lettere XYZ. Ad esempio, se il codice è il seguente:

C XXX
I QWE
O OPA
A EMU
L CAR
S ONE
ed il messaggio è il seguente:
CIAOLISA
il testo tradotto è il seguente:
XXXQWEEMUOPACARQWEONEEMU
Si noti che (come evidenziato nell'esempio) non necessariamente tutte le 26 lettere dell'alfabeto inglese sono codificate.

Due aspetti che devono essere presi in considerazione sono i seguenti:

1.
Alcune lettere dell'alfabeto potrebbero essere codificate più di una volta nel codice (un codice di questo tipo si dice incoerente). Ad esempio, se nel file dell'esempio precedente occorresse anche la linea

O USA

il codice sarebbe incoerente.

2.
Alcune lettere del messaggio potrebbero non essere codificate dal codice, che in tal caso si dice incompleto rispetto al messaggio. Ad esempio, se il messaggio fosse

CIAOANNA

il codice visto in precedenza sarebbe incompleto, perché la lettera N non è codificata.

In particolare, si richiede di risolvere i seguenti punti:

1.
Scrivere le dichiarazioni dei tipi di dato Pascal da utilizzarsi per risolvere i punti successivi.
2.
Scrivere una (o più) unità di programma Pascal che, dato un file contenente un codice, restituisca un valore booleano indicante se esso è incoerente oppure no. (Suggerimento: progettare l'unità in maniera sufficientemente generale, al fine di renderla utile anche per il punto successivo).
3.
Scrivere una (o più) unità di programma Pascal che, dati due file contenenti rispettivamente un codice e un messaggio, verifichi se il codice è coerente e completo rispetto al messaggio, e in tal caso costruisca una lista contenente il messaggio tradotto. La lista deve essere composta da record contenenti un solo carattere. Il verso della lista è a scelta dello studente.

Università di Roma ``La Sapienza''
Facoltà di Ingegneria
Corso di Fondamenti di Informatica
Corsi di Laurea: Aerospaziale, Chimica, Elettrica, Materiali, Nucleare, Ambiente e Territorio (v.p.)

Appello del 16/9/1999 -- 2a prova scritta
tempo a disposizione: 1 ora

Problema 2 (4 punti)

Descrivere gli aspetti fondamentali della ricorsione, fornendo almeno un esempio di unità di programma Pascal ricorsiva. Descrivere inoltre la maniera in cui la ricorsione è implementata in Pascal.

Problema 3 (4 punti)

Scrivere un programma Pascal che costruisca in memoria la lista illustrata in figura. Il programma deve essere completo, cioè deve essere compilabile.

  ____        __________      __________      _________      _________
 |    |      |       |  |    |       |  |    |      |  |    |     |  /|
 | --------->|  'c'  | ----->|  'i'  | ----->|  'a' | ----->| 'o' | / |
 |____|      |_______|__|    |_______|__|    |______|__|    |_____|/__|




Problema 4 (4 punti)

Scrivere un sottoprogramma Fortran che, ricevendo come parametro una matrice quadrata di interi positivi di dimensione n per n, calcoli e restituisca in modo opportuno al programma chiamante: