Diploma Universitario in Ingegneria Informatica Esame di Fondamenti di Informatica II - primo modulo A.A. 1998/99 - Appello del 21 dicembre 1998 - Compito A Problema 1 Si vuole progettare una classe in modo tale che ogni oggetto della classe rappresenti un nastro utilizzato per memorizzare programmi televisivi gia' trasmessi. La specifica del corrispondente tipo astratto e`: TipoAstratto Nastro Commento ogni valore del tipo rappresenta un nastro in cui si memorizzano programmi televisivi Domini Nas (dominio di interesse), Programma (con la funzione Durata che consente di calcolare la durata in ore di un programma) Funzioni Crea : (Intero) --> Nas precondizioni e postcondizioni per Crea(k) = n pre_: nessuna post_: n rappresenta il nastro vuoto con capienza di k ore Capienza : (Nas) --> Intero precondizioni e postcondizioni per Capienza(n) = k pre_: nessuna post_: k e' la capienza di n espressa in ore Memorizza : (Nas, Programma) --> Nas precondizioni e postcondizioni per Memorizza(n,p) = m pre_: il nastro n ha spazio libero sufficiente per memorizzare p post_: m e' il nastro uguale a n, con la differenza che in m e' memorizzato un programma in piu'; il programma che m ha in piu' rispetto a n e' p, e si trova in posizione Quanti(n) + 1 Quanti : (Nas) --> Intero precondizioni e postcondizioni per Quanti(n) = h pre_: nessuna post_: h e' il numero di programmi memorizzati in n QualeProgramma : (Nas, Intero) --> (Boolean, Programma) precondizioni e postcondizioni per QualeProgramma(n,i) = (b,p) pre_: nessuna post_: se 1 <= i <= Quanti(n), allora b = true e p e' il programma memorizzato in n in posizione i; altrimenti b = false e p non e' significativo FineTipoAstratto Si assuma che esista la classe Programma, e che le uniche operazioni lecite sugli oggetti di questa classe siano il costruttore di copia, l'assegnazione, la verifica di uguaglianza, e la funzione Durata(), specificata come segue: p.Durata() restituisce la durata in ore del programma p. Domanda 1 Si chiede di illustrare le scelte di progetto riguardante la realizzazione del tipo astratto N astro mediante una classe Nastro in C++. Domanda 2 Si chiede di scrivere la classe Nastro che realizza il tipo astratto N astro secondo le scelte di progetto illustrate per la Domanda 1. Se la progettazione della classe richiede la ridefinizione del costruttore di copia e dell'operatore di assegnazione, la specifica delle loro istruzioni e' facoltativa. Problema 2 Realizzare una funzione esterna (non friend) alla classe Nastro che, dato un oggetto n della classe Nastro, calcoli quante ore di programmi e' possibile ancora memorizzare nel nastro rappresentato da n. Problema 3 Illustrare la specifica del tipo astratto Albero Binario, e scrivere la classe che realizza tale tipo astratto con lo schema funzionale con condivisione di memoria. La scrittura del file .h e' obbligatoria, mentre quella del file .cpp e' facoltativa.