Diploma Universitario di Ingegneria Informatica
Esame di Fondamenti di Informatica II - secondo modulo
A.A. 1999/2000 - Appello del 14 settembre 2000
Problema 1 Si consideri la seguente specifica del tipo
astratto ClasseAsilo:
- TipoAstratto ClasseAsilo
- Sorte CA (sorta per il dominio di interesse)
- Funzioni
- Crea : (Maestra) --> CA
precondizioni e postcondizioni per crea(m) = c
pre: nessuna
post: c è
una classe d'asilo avente come maestra m
e con nessun bambino
- Maestra : (CA) --> Maestra
precondizione e postcondizioni per Maestra(c) = m
pre: nessuna
post: m è la maestra della classe d'asilo
c
- NuovoIscritto : (CA,Bambino) --> CA
precondizione e postcondizioni per
NuovoIscritto(c,b) = d
pre: b non è
iscritto alla classe c (né lo è mai stato)
post: d è la classe d'asilo ottenuta
da d aggiungendo il bambino b agli iscritti
- Rinuncia : (CA,Bambino) --> CA
precondizioni e postcondizioni per Rinuncia(c,b) = d
pre: b è
iscritto alla classe c
post: d è la classe d'asilo ottenuta da
c cambiando lo status di b da iscritto a
rinunciatario
- Status : (CA,Bambino) --> Integer
precondizione e postcondizioni per Status(c,b) = n
pre: nessuna
post: n=1 se
b è iscritto a c; n=0 se b ha
rinunciato all'iscrizione; n=-1 altrimenti
- FineTipoAstratto
Scrivere una classe C++ ClasseAsilo (file .h e file
.cpp) che realizza il tipo astratto ClasseAsilo in modo che
tutte le operazioni del tipo astratto, escluso Crea, siano realizzate in
tempo costante (O(1)) nel caso atteso. Si consideri che per riferirsi
ai tipi astratti Maestro e Bambino è necessario utilizzare
le classi Maestra e Bambino già realizzate
delle quali però non è nota la definizione.
Problema 2 Si modifichi la definizione della classe
ClasseAsilo realizzata per il Problema 1 aggiungendo la funzione
BambiniIscrittiRinunciatari alla classe la cui specifica
è:
- BambiniIscrittiRinunciatari :
(CA) --> Enumerazione(Bambino)
precondizione e postcondizioni per
BambiniIscrittiRinunciatari(c) = e
pre: nessuna
post: e è una enumerazione dei
bambini iscritti alla
classe c o rinunciatari;
l'ordine della enumerazione è qualsiasi
Definire una opportuna classe Iteratore che realizza il tipo
astratto Enumerazione(Bambino), in modo che la funzione
BambiniIscrittiRinunciatari sia eseguita in tempo costante
(O(1)).