Università di Roma "La Sapienza" – Facoltà di Ingegneria

Corso di Fondamenti di Informatica

Corso di laurea: Ambiente e Territorio

14 luglio 1999 (1ª prova)

tempo a disposizione: 120 minuti

Problema 1 (18 punti)

Un grande aeroporto è suddiviso in diversi terminali, ognuno dei quali è identificato da una lettera dell'alfabeto progressiva, a partire dalla lettera 'A'. Per ogni terminale l'accesso ai voli in partenza avviene da diversi gate. Tutti i terminali dell'aeroporto hanno lo stesso numero di gate, ed ogni gate è identificato da un intero compreso tra 1 ed il numero di gate. Il numero di terminali ed il numero di gate per terminale sono costanti e fissati a priori.

Le informazioni riguardo al numero giornaliero di passeggeri in partenza dall'aeroporto sono memorizzate in un file di testo, come segue: il file è suddiviso in righe, ognuna delle quali contiene, separati da uno spazio,

Ogni coppia terminale-gate compare in al più una riga del file. Se una coppia terminale-gate non compare in alcuna riga del file il corrispondente numero giornaliero di passeggeri in partenza è nullo.

Si richiede di risolvere i seguenti punti:

  1. Costruire una opportuna struttura di dati adatta a memorizzare in memoria centrale tutte le informazioni riguardo al numero giornaliero di passeggeri in partenza dall'aeroporto, fornendo le corrispondenti dichiarazioni di tipo C. Fornire inoltre le ulteriori dichiarazioni globali in C da utilizzarsi per risolvere i due punti successivi.
  2. Scrivere una funzione C (o più) che, ricevendo come parametro il nome di un file di testo contenente le informazioni riguardo al numero giornaliero di passeggeri in partenza dall'aeroporto, restituisca in un opportuno parametro la struttura progettata al punto 1 (contenente quindi tutte le informazioni memorizzate sul file).
  3. Scrivere una funzione C (o più) che, ricevendo in ingresso attraverso opportuni parametri

costruisca e restituisca una lista con un elemento per ogni coppia terminale-gate con numero di passeggeri in partenza minore o uguale al numero dato. Ogni elemento è costituito dagli identificativi di terminale e di gate e dal rispettivo numero di passeggeri in partenza. La lista restituita deve essere ordinata per lettera identificativa del terminale crescente (i gate associati a ciascun terminale possono invece comparire in ordine arbitrario).

 

Esempio

Per un aeroporto con tre terminali (identificati quindi da 'A', 'B' e 'C') e tre gate per ogni terminale, è mostrato il possibile contenuto di un file di testo con le informazioni riguardo al numero giornaliero di passeggeri in partenza. Se al punto 3 si prende in ingresso la struttura corrispondente a tale file di testo (come costruita al punto 2), ed il valore 100, viene restituita la lista mostrata in figura.

B 2 358

A 1 25

A 3 872

C 2 92

B 1 281

B 3 542

C 1 1132

C 3 88


Università di Roma "La Sapienza" – Facoltà di Ingegneria

Corso di Fondamenti di Informatica

Corso di laurea: Ambiente e Territorio

14 luglio 1999 (2ª prova)

tempo a disposizione: 60 minuti

Problema 2 (4 punti)

Con riferimento al linguaggio C, descrivere le modalità con cui avvengono le operazioni fra operandi di tipo non identico.

 

Problema 3 (4 punti)

Per il seguente frammento di programma C, assumendo validi i prototipi mostrati, indicare quali chiamate di funzione sono corrette e quali sono errate, motivando le risposte date.

typedef struct {

char c1;

int c2;

} TipoStrutt;

typedef int TipoVett[4];

/* prototipi */

void Proc1 (char *, int);

void Proc2 (TipoStrutt);

void Proc3 (int, int *, int);

void Proc4 (TipoVett);

int Fun1 (char, int);

/* ... */

main() {

char a;

int i;

TipoStrutt s;

TipoVett v;

/* ... */

Proc1(&a, i); /* 1 */

Proc1("a", i); /* 2 */

Proc2(s); /* 3 */

Proc2(s.c1, s.c2); /* 4 */

Proc2(s.c2, s.c1); /* 5 */

Proc3(v[3], &v[2], v[1]); /* 6 */

Proc3(v[1], i, i); /* 7 */

Proc4(v); /* 8 */

Proc4([i,v[2],i]); /* 9 */

i = Fun1(a, i); /* 10 */

Fun1(a, i); /* 11 */

i = Fun1('1', i); /* 12 */

/* ... */

}

 

Problema 4 (4 punti)

Data la relazione Voli (v. tabella esemplificativa), scrivere un'interrogazione SQL che mostri tutti i viaggi con esattamente uno scalo intermedio, senza cambiare compagnia aerea, da Roma a Parigi.

Voli

Partenza

Destinazione

Compagnia

Roma

Milano

Air-Pippo

Milano

Parigi

Air-Pluto

Milano

Berlino

Air-Pippo

Roma

Palermo

Air-Orazio

Palermo

Parigi

Air-Orazio

Milano

Ancona

Air-Pippo

Ancona

Parigi

Air-Pippo

 

Con riferimento all'esempio, l'interrogazione richiesta deve fornire come risultato la relazione

Partenza

Scalo

Destinazione

Compagnia

Roma

Palermo

Parigi

Air-Orazio