Università di Roma ``La Sapienza''
Facoltà di Ingegneria
Corso di Fondamenti di Informatica - A.A.1999/2000
Corsi di Laurea: Aerospaziale, Chimica, Elettrica, Materiali, Meccanica, Nucleare

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

Problema 1 (18 punti)

Una compagnia assicurativa registra i principali dati relativi alle polizze RC-auto e i dati relativi agli incidenti automobilistici segnalati all'assicurazione su due file (di testo o di record, a scelta del candidato).

Il file relativo agli incidenti contiene per ogni incidente le seguenti informazioni:

Il file relativo alle polizze contiene per ogni polizza le seguenti informazioni:

In base ai dati contenuti nei due file la compagnia deve aggiornare le classi di merito associate alle polizze secondo il seguente criterio: se l'autoveicolo non è responsabile di alcun incidente, la classe di merito viene decrementata di uno (fino ad un minimo di 0), mentre per ogni incidente di cui l'autoveicolo è responsabile, la classe di merito viene incrementata di 2 (fino ad un massimo di 20).

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 procedura o funzione Pascal che riceva come parametro il nome fisico di un file di incidenti e, in base alle informazioni contenute in tale file, costruisca e restituisca opportunamente una lista, rappresentata mediante record e puntatori, in cui ogni elemento è una coppia <t,n>, dove t è una targa di autoveicolo ed n è un intero positivo che denota il numero di incidenti di cui l'autoveicolo è stato responsabile.
  3. Scrivere una procedura o funzione Pascal che riceva come parametri il nome fisico di un file di polizze ed una lista di coppie <t,n> (come definita al punto 2), ed aggiorni le classi di merito nel file di polizze in base alle informazioni contenute nella lista.
(Nelle procedure o funzioni ai punti 2 e 3 si possono eventualmente includere le definizioni di altre unità di programma di appoggio.)

Ad esempio, per il file di incidenti in Fig.1, l'unità al punto 2 deve costruire la lista in Fig.2, e l'unità al punto 3, ricevendo come parametro tale lista ed il nome del file di polizze in Fig.3, deve aggiornare tale file come in Fig.4.

EE333FF 01012000 S $\downarrow$ AA111BB 14 Anna Medi AA111BB 13 Anna Medi
XX999YY 23052000 N EE333FF, 2 CC222DD  1 Ben Santi CC222DD  0 Ben Santi
GG444HH 12082000 S $\downarrow$ EE333FF 17 Cat Distratti EE333FF 20 Cat Distratti
EE333FF 02102000 N GG444HH, 1 GG444HH 10 Don Rossi GG444HH 12 Don Rossi
EE333FF 20122000 S
Fig.1: file di incidenti Fig.2: lista Fig.3: file di polizze Fig.4: file di polizze aggiornato


Università di Roma ``La Sapienza''
Facoltà di Ingegneria
Corso di Fondamenti di Informatica - A.A.1999/2000
Corsi di Laurea: Aerospaziale, Chimica, Elettrica, Materiali, Meccanica, Nucleare

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


Problema 2 (4 punti)

Descrivere un algoritmo di ordinamento (utilizzando pseudocodice o codice Pascal) e discuterne la complessità computazionale. Fornire un esempio di vettore per cui l'algoritmo esibisce il comportamento del caso peggiore.


Problema 3 (4 punti)

Si consideri il seguente frammento di programma Pascal:

program Esame;
const  II = 5;
       CC = '9';
var i, j, k : integer;
    c, d : char;

function m1 (x: integer; var y: integer): integer;
begin ... end;

procedure m2 (x: integer; e: char; var f: char);
begin ... end;

begin { Esame }
  ...
  i := m1(k, II);      { 1 }             m1(i, j);            { 5 }
  j := m2(k, c, d);    { 2 }             m2(II, CC, c);       { 6 }
  k := m1(i, j);       { 3 }             m2(CC, CC, d);       { 7 }
  m2(c, d, d);         { 4 }             d := m1(II, j);      { 8 }
  ...
end. { Esame }

Quali attivazioni di procedura o funzione sono corrette e quali no? Motivare ciascuna risposta data.


Problema 4 (4 punti)

Definiamo istogramma di un vettore di interi di dimensione N, una matrice di interi di dimensione NxN fatta nel seguente modo: per ogni riga i, sia ki il valore dell'i-esimo elemento del vettore:

Scrivere un sottoprogramma Fortran che, ricevendo come parametro un vettore di dimensione N, costruisca e restituisca al programma chiamante l'istogramma del vettore. Scrivere un esempio di programma principale contente l'attivazione del sottoprogramma.