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:
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 | ![]() |
AA111BB 14 Anna Medi | AA111BB 13 Anna Medi |
XX999YY 23052000 N | EE333FF, 2 | CC222DD 1 Ben Santi | CC222DD 0 Ben Santi |
GG444HH 12082000 S | ![]() |
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 |
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.