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

Appello del 14/4/2000 -- 1a prova scritta
tempo a disposizione: 2 ore

Problema 1 (18 punti)

Un appassionato di calcio gestisce le informazioni relative ad un campionato di calcio (18 squadre) in un file di record, in cui ciascun elemento è associato ad una squadra e contiene le seguenti informazioni:

Denominiamo, per comodità un file di tale tipologia file di squadre.

Come è noto, in base ai regolamenti attuali, vengono attributi alle squadre, ai fini della classifica, 3 punti per la vittoria, 1 punto per il pareggio e 0 punti per la sconfitta.

Con riferimento al linguaggio Pascal, si richiede di risolvere i seguenti punti:

  1. Definire i tipi di dato e dichirare le eventuali variabili globali necessarie per risolvere i successivi punti 2 e 3. Qualora vengano usate variabili globali è necessario motivare adeguatamente la scelta.
  2. Scrivere una o più unità di programma che, ricevendo come parametro il nome con cui è stato memorizzato un file di squadre, calcoli e restituisca il nome della squadra che guida la classifica corrente. A parità di punteggio, si scelga la squadra con migliore differenza reti. A parità di punteggio e differenza reti, si scelga arbitrariamente una delle squadre.
  3. Scrivere una o più unità di programma che, ricevendo come parametro il nome con cui è stato memorizzato un file di squadre, costruisca, restituendola, una lista collegata (rappresentata tramite record e puntatori) in cui ciascun elemento, costituito da tre campi, è associato ad una squadra avente differenza reti (reti segnate meno reti subite) migliore o pari a quella della squadra che guida attualmente la classifica. I campi sono utilizzati per memorizzare il nome della squadra, la sua differenza reti ed il puntatore all'elemento successivo nella lista.

N.B. Nel risolvere i punti di cui sopra tenere presente che:


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

Appello del 14/4/2000 -- 2a prova scritta
tempo a disposizione: 1 ora

Problema 2 (4 punti)

Discutere la differenza fra tipo di dato semplice e tipo di dato strutturato. Con riferimento al linguaggio Pascal, discutere sinteticamente le operazioni generalmente disponibili nell'ambito delle due categorie di tipi.

Problema 3 (4 punti)

Con riferimento al seguente programma Pascal, descrivere con precisione quali caratteri vengono stampati sullo schermo quando il programma riceve in input il tuo nome di battesimo, terminato dal carattere `.'. Mostrare inoltre l'evoluzione della pila dei record di attivazione.

program Esame;
const
  MaxLung =  40;
type
  TipoNome = array [1..MaxLung] of char;
var
  nome : TipoNome;
  ch   : char;
  i    : integer;

  procedure Mistero (s: TipoNome; n: integer);
  begin
    write(s[n]);
    if n > 1 then
      Mistero(s, n-1)
  end; { Mistero }

begin { Esame }
  i := 0;
  readln;
  repeat
    i := i+1;
    read(nome[i])
  until nome[i] = '.';
  Mistero(nome, i-1)
end. { Esame }

Problema 4 (4 punti)

Scrivere un sottoprogramma Fortran che, ricevendo come parametro una matrice di interi di dimensione NxN, verifichi se la somma degli elementi della diagonale principale è uguale alla somma degli elementi della diagonale secondaria, e restituisca in modo opportuno il risultato di tale verifica al programma chiamante.