Tecniche di Programmazione
Corso di Laurea in Ingegneria Informatica
Corso di Laurea in Ingegneria Automatica
A.A. 2003/04
Appello del 23/3/2004 - Compito A
Si vogliono gestire dei laboratori di riparazione. Di un oggetto LaboratorioRiparazione
sono di interesse il nome del laboratorio (una stringa) e la collezione delle
riparazioni che devono essere effettuate. Di ogni riparazione sono di interesse le seguenti
informazioni:
- un identificatore dell'oggetto da riparare (una stringa);
- il tipo di riparazione che deve essere effettuata sull'oggetto
(una stringa).
Gli oggetti LaboratorioRiparazione supportano le seguenti funzionalità:
- crea: che, data una stringa n che rappresenta il nome
di laboratorio, crea un oggetto LaboratorioRiparazione con nome n
che inizialmente non ha alcuna riparazione da effettuare;
- nome: che restituisce il nome del LaboratorioRiparazione;
- presente: che, dato l'identificatore di un oggetto da riparare,
restituisce true se l'oggetto è nel laboratorio, false
altrimenti;
- tipo: che, dato l'identificatore di un oggetto da riparare, restituisce
il tipo di riparazione da effettuare sullo stesso, se l'oggetto è nel
laboratorio, altrimenti lancia una eccezione;
- aggiungi: che, dato l'identificatore di un oggetto da riparare
ed il tipo di riparazione da effettuare sullo stesso, aggiunge una nuova riparazione
in coda alle riparazione da effettuare; tuttavia se è già presente
un oggetto da riparare con lo stesso identificatore, lancia una eccezione.
- serviPrimo: che effettua la prima riparazione in coda, eliminandola
dalla coda e restituendo una stringa ottenuta dalla concatenazione
dell'identificatore dell'oggetto da riparare, del carattere ';'
e del tipo di riparazione da effettuare;
se non c'e' alcuna riparazione da effettuare lancia una eccezione;
- serviTipo: che, dato un tipo di riparazione, effettua la prima
riparazione in coda di quel tipo, eliminandola dalla coda e restituendo l'identificatore
dell'oggetto da riparare; se non c'e' alcuna riparazione di quel tipo da effettuare
restituisce null;
- quantiTipo: che, dato un tipo di riparazione, restituisce il numero
di riparazioni da effettuare di quel tipo;
- tuttiTipo: che, dato un tipo di riparazione, restituisce un array
di stringhe contenente gli identificatori degli oggetti su cui si deve effettuare
la riparazione di quel tipo.
Domanda 1. Scrivere una classe Java LaboratorioRiparazione
per rappresentare oggetti LaboratorioRiparazione. Fornire il costo in tempo dei metodi
che realizzano le funzionalità tipo, serviTipo e tuttiTipo, motivando la risposta (indicando esplicitamente
i parametri di input e il caso peggiore).
Domanda 2. Realizzare un metodo statico oggettiInRiparazione
cliente della classe LaboratorioRiparazione che, dati
- un array di stringhe arr contenente un insieme di tipi di riparazione
(tutti diversi tra loro) ,
- il nome fout di un file,
- ed un
LaboratorioRiparazione lr
scrive sul file fout, uno per riga, gli identificatori degli oggetti
in riparazione in lr il cui tipo sia presente in arr.
Fornire il costo in tempo del metodo realizzato, motivando la risposta e individuando
i parametri di input e il caso peggiore.
Domanda 3. Spiegare la rappresentazione collegata di alberi
binari in cui l'informazione in ciascun nodo è un intero. Spiegare l'algoritmo
di visita in postordine di alberi binari. Facendo uso della rappresentazione
collegata, realizzare un metodo statico pubblico che, dato il riferimento alla
radice di un albero binario alb i cui nodi contengono interi, restituisca
il numero di foglie la cui informazione sia un numero positivo (maggiore di
0).
Fornire il costo in tempo e spazio di memoria del metodo realizzato, motivando la risposta (indicando esplicitamente
i parametri di input e il caso peggiore).