Fondamenti di Informatica II - Secondo Modulo
A.A. 1999/00 - Esercizio d'esame - prima parte
Problema 1 Si consideri la seguente specifica del tipo astratto Deposito:
- TipoAstratto
Deposito
Sorte
Dep (sorta per il dominio di interesse)
Funzioni
- Crea
: () --> Dep
precondizioni e postcondizioni per Crea() = d
pre: nessuna
post: d è un deposito con 0 auto;
- EntraAuto
: (Dep,Auto,Targa) --> Dep
precondizioni e postcondizioni per EntraAuto(d,a,t) = e
pre:
l'auto a alla quale è associata la targa t non è
nel deposito d
post: e è il deposito ottenuto da d aggiungendo
l'auto a con associata la targa t;
- EstInDeposito
: (Dep, Targa) --> Boolean
precondizioni e postcondizioni per EstInDeposito(d,t) = b
pre: nessuna
post: b=true se l'auto alla quale è associata la targa t è nel deposito, b=false altrimenti;
- DammiAuto
: (Dep, Targa) --> Auto
precondizioni e postcondizioni per DammiAuto(d,t) = a
pre: l'auto alla quale è associata la targa t è nel deposito d
post: a è l'auto alla quale è associata la targa t;
- EsceAuto
: (Dep,Targa) --> Dep
precondizioni e postcondizioni per EsceAuto(d,t) = e
pre: l'auto alla quale è associata la targa t è nel deposito d
post: e è il deposito ottenuto da d eliminando l'auto alla quale è associata la targa t;
FineTipoAstratto
Domanda 1 Realizzare il tipo astratto Deposito
mediante una classe C++ Deposito
in modo da rendere le operazioni
del tipo astratto il più efficienti possibile. Per riferirsi al tipo
astratto Auto è necessario utilizzare la classe già
definita Auto
, della quale è nota solo la funzione
Targa()
: la chiamata a.Targa()
restituisce la targa
associata all'auto a
. Per rappresentare il tipo astratto
Targa si utilizzi una stringa (cioè un array char*
che termina con il carattere '\0'
). Per verificare l'uguaglianza
tra stringhe si utilizzi la funzione predefinita int strcmp(char* st1,
char* st2)
che restituisce 0
, se st1
è
uguale a st2
, e un intero diverso da 0
, altrimenti.
Domanda 2 Si discuta brevemente la complessità di ciascuna delle funzioni pubbliche della classe Deposito
.