Università di Roma ``La Sapienza''
Facoltà di Ingegneria
Corso di Fondamenti di Informatica
Corso di Laurea: Ambiente e Territorio
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 di testo, è composto da una sequenza di righe, dove ogni riga 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.

Il problema consiste nel progettare parte di un programma C che traduca un messaggio, contenuto in un file di testo, utilizzando un codice, anch'esso contenuto in un file di testo. Due aspetti che devono essere presi in considerazione sono i seguenti:

In particolare, si richiede di risolvere i seguenti punti:
  1. Scrivere le dichiarazioni dei tipi di dato C da utilizzarsi per risolvere i punti successivi.
  2. Scrivere una funzione C (o più) che, dato un file di testo contenente un codice, restituisca un valore booleano indicante se esso è incoerente oppure no.

  3. [Suggerimento: progettare la funzione in maniera sufficientemente generale, al fine di renderla utile anche per il punto successivo.]
  4. Scrivere una funzione C (o più) che, dati due file di testo contenenti rispettivamente un codice e un messaggio, verifichi se il codice è coerente e completo, e in tal caso costruisca una lista contenente il messaggio tradotto. La lista deve essere composta da strutture 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
Corso di Laurea: Ambiente e Territorio
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 funzione C ricorsiva. Descrivere inoltre la maniera in cui viene gestita la memoria per implementare in C la ricorsione.
 
 
 

Problema 3 (4 punti)

Scrivere un programma C che costruisca in memoria la lista illustrata in figura. Il programma deve essere completo, cioè deve essere compilabile. Non devono essere scritte procedure o funzioni, ma solamente il programma principale.




Problema 4 (4 punti)

Date le relazioni create col seguente frammento SQL:

    create table studenti (
        matricola character(8) primary key,
        nome character(20) not null,
        cognome character(20) not null
    );
    
    create table esamiinformatica (
        data date,
        matricolastudente character(8) references studenti(matricola)
            on update cascade
            on delete set null,
        esito smallint,
        primary key (data, matricolastudente)
    );
scrivere una interrogazione SQL che restituisca l'elenco (nome e cognome) degli studenti che hanno superato l'esame al primo tentativo.
[Si assuma che una insufficienza sia memorizzata come 17 e un 30 & lode come un 31.]
 

Orali e verbalizzazioni: giovedì 23 settembre 1999, h 9, via Salaria 113, 2o piano, aula C3.


File translated from TEX by TTH, version 2.25.
On 4 Nov 1999, 14:59.