Esercitazione 10

Variante in C della 1a prova scritta dell'appello di esame del 14 ottobre 2000, del Corso di Fondamenti di Informatica - A.A.1999/2000 dei Corsi di Laurea in Ing. Aerospaziale, Chimica, Elettrica, Materiali, Meccanica, Nucleare.


Testo

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.

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 definizioni dei tipi di dato C da utilizzarsi per risolvere i punti successivi.
  2. Scrivere una funzione C che riceva come parametro il nome di un file di incidenti e, in base alle informazioni contenute in tale file, costruisca e restituisca opportunamente una lista, rappresentata mediante strutture 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 funzione C che riceva come parametri il nome 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 soluzioni ai punti 2 e 3 si possono eventualmente includere le definizioni di altre funzioni di appoggio.)

Ad esempio, per il file di incidenti in Fig.1, la funzione al punto 2 deve costruire la lista in Fig.2, e la funzione 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 Medi AA111BB 13 Medi
XX999YY 23052000 N EE333FF, 2 CC222DD  1 Santi CC222DD  0 Santi
GG444HH 12082000 S $\downarrow$ EE333FF 17 Distratti EE333FF 20 Distratti
EE333FF 02102000 N GG444HH, 1 GG444HH 10 Rossi GG444HH 12 Rossi
EE333FF 20122000 S
Fig.1: file di incidenti Fig.2: lista Fig.3: file di polizze Fig.4: file di polizze aggiornato


Soluzione