                      Diploma Universitario in Ingegneria Informatica

                    Esame di Fondamenti di Informatica II Secondo Modulo
                    A.A. 1999/00 - Esempio compito d'esame - prima parte


Problema 1
Un museo e' costituito da varie sale, identificate da numeri
interi positivi e collegate da corridoi percorribili in entrambi i
sensi.   La specifica del tipo astratto "Museo" e':

TipoAstratto  Museo

Commento ogni valore del tipo rappresenta un museo

Sorte Mus (sorta per il dominio di interesse)

Funzioni
       Crea    : (Intero) --> Mus
              precondizioni e postcondizioni per Crea(n) = m
              pre_: n > 0
              post_:  m e' un museo con n sale e nessun corridoio; le sale
                      sono rappresentate dai numeri 0...n-1; l'entrata e'
                      rappresentata dalla sala 0
       NumeroSale      : (Mus) --> Intero
              precondizioni e postcondizioni per NumeroSale(m) = i
              pre_: nessuna
              post_: i e' il numero di sale di m
       AggiungiCorridoio       : (Mus, Intero, Intero) --> Mus
              precondizioni e postcondizioni per AggiungiCorridoio(m, i, j) = s
              pre_: i <= j, 1 <= i <= NumeroSale(m), 1 <= j <=  NumeroSale(m)
              post_: s e' il museo ottenuto da m aggiungendo il corridoio che
                     congiunge le due sale i e j; se tale corridoio e'
                     in m, s e' uguale a m
       SaleAdiacenti      : (Mus, Intero) --> Insieme(Intero)
              precondizioni e postcondizioni per SaleAdiacenti(m, i) = ins
              pre_: i <= j, 1<=  i <= NumeroSale(m)
              post_: ins e' l'insieme delle sale collegate da un corridoio
                     alla sala i
FineTipoAstratto



Domanda 1 Progettare una classe C++ Museo che realizzi il tipo astratto Museo,
in modo da rendere la funzione SaleAdiacenti il piu' efficente
possibile. Scrivere la definizione della classe (file .h), descrivendo
brevemente le funzioni della classe e discutendo la loro complessita'.


Domanda 2 Scrivere una funzione esterna (non friend) alla classe Museo che
riceva in ingresso:
   1.  un oggetto m della classe Museo,
   2.  una lista p di elementi interi che denota una sequenza di stanze da
       visitare, dove la lista e' rappresentata mediante un puntatore di tipo
       rec, la cui definizione e':

       struct rec {
         int  info;
         rec*  next;
       };

e restituisca una lista, anch'essa rappresentata mediante un puntatore di tipo
rec, che denota il cammino minimo all'interno del museo che a partire
dall'entrata (nodo 0) passa per le stanze indicate in p rispettando l'ordine
indicato da p. Calcolare la complessita' della funzione.
