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 14/7/1999 -- 1a prova scritta
tempo a disposizione: 2 ore

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 relative al numero giornaliero di passeggeri in partenza dall'aeroporto sono memorizzate su un file (di testo o di record, a scelta del candidato). Più precisamente, per ogni coppia terminale-gate che compare nel file sono specificate:

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

Si richiede di risolvere i seguenti punti:

1.
Progettare una struttura di dati adatta a memorizzare in memoria centrale le informazioni relative al numero giornaliero di passeggeri in partenza dall'aeroporto, e fornire le corrispondenti dichiarazioni di tipo Pascal. Fornire inoltre le ulteriori dichiarazioni di tipo Pascal da utilizzarsi per risolvere i due punti successivi.
2.
Scrivere una (o più) unità Pascal che, ricevendo come parametro il nome di un file contenente le informazioni relative al numero giornaliero di passeggeri in partenza dall'aeroporto, restituisca in un opportuno parametro la struttura progettata al punto 1 (contenente le stesse informazioni che sono memorizzate sul file).
3.
Scrivere una (o più) unità Pascal che, ricevendo in ingresso attraverso opportuni parametri costruisca e restituisca in un opportuno parametro una lista con un elemento per ogni coppia terminale-gate con numero di passeggeri in partenza minore o uguale al numero dato. Ogni elemento della lista è costituito dagli identificativi di terminale e di gate e dal rispettivo numero di passeggeri in partenza. La lista restituita deve essere ordinata rispetto alla 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 relative al numero giornaliero di passeggeri in partenza. Se l'unità progettata al punto 3 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 3 542
B 1 281
C 1 1132
C 3 88
\begin{center}\vbox{\input{990714.eepic}
}\end{center}

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 14/7/1999 -- 2a prova scritta
tempo a disposizione: 1 ora

Problema 2 (4 punti)

Descrivere l'architettura di Von Neumann di un calcolatore e, più in dettaglio, la struttura ed il funzionamento della CPU.

Problema 3 (4 punti)

Per il seguente frammento di programma Pascal, indicare quali attivazioni di procedura o funzione sono corrette e quali sono errate, motivando le risposte date.

program Main;
type TipoRec  = record
                  c1 : char;
                  c2 : integer
                end;
     TipoVett = array [1..3] of integer;
var a : char;
    i : integer;
    r : TipoRec;
    v : TipoVett;

procedure Proc1 (var p1: char; p2: integer);
begin ... end;

procedure Proc2 (p: TipoRec);
begin ... end;

procedure Proc3 (p1: integer; var p2, p3: integer);
begin ... end;

procedure Proc4 (p: TipoVett);
begin ... end;

function Fun1 (p1: char; p2: integer): integer;
begin ... end;

begin { Main }
  ...
  {  1 }   Proc1('a', i);
  {  2 }   Proc1(a, i);
  {  3 }   Proc2(a, i);
  {  4 }   Proc2(r.c1, r.c2);
  {  5 }   Proc2(r.c2, r.c1);
  {  6 }   Proc3(v[3], v[2], v[1]);
  {  7 }   Proc3(v[1], i, i);
  {  8 }   Proc4(v);
  {  9 }   Proc4([i,v[2],i]);
  { 10 }   i := Fun1(a, i);
  { 11 }   Fun1(a, i);
  { 12 }   i := Fun1('1', i);
  ...
end. { Main }

Problema 4 (4 punti)

Scrivere un sottoprogramma Fortran che, ricevendo come parametro una matrice quadrata di dimensione n x n, verifichi se le somme degli elementi di tutte le righe sono uguali tra loro ed uguali alla somma degli elementi della diagonale principale.




1999-07-14