PDF created with FinePrint pdfFactory trial version http://www

Seconda prova in itinere di
Laboratorio di Algoritmi e Strutture Dati – Prof Carlo Blundo
Anno Accademico 2001/2002 – Matricole 6, 7, 8 e 9
Cognome e Nome:
Numero di Matricola:
Spazio riservato alla correzione
1
/10
2
/20
3
/20
4
/50
totale
/100
Non usare altri fogli, usare solo lo spazio sottostante. Fogli differenti da questo non saranno presi in considerazione per
la correzione.
1. Vero/Falso [10 punti]
Indicare quali dei seguenti frammenti di programma sono corretti. Non è necessario giustificare la
risposta.
1
2
3
4
5
6
7
8
9
10
template <class T, U> class prima;
template <class T, typename U> class seconda;
template <class Z> terza;
template <class A, typename A> class quarta;
template <class W> class quinta {
typedef int W;
.....
};
class sesta {
friend sesta& operator=(const sesta&);
....
};
class settima {
private:
int a;
settima() {a=0};
… … .
};
class ottava {
public:
explicit ottava(string&);
… ..
};
class nona {
int v = 0;
.........
};
int uno=9;
template <int uno, typename K, class U> class decima ;
Pag. 1
PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Seconda prova in itinere di
Laboratorio di Algoritmi e Strutture Dati – Prof Carlo Blundo
Anno Accademico 2001/2002 – Matricole 6, 7, 8 e 9
2. Dijkstra [20 punti]
[ 5 punti] Si illustri a cosa serve l’algoritmo di Dijkstra e le strutture dati su cui si basa.
[10 punti] Codificare, usando pseudocodice oppure codice C++, l’algoritmo di Dijkstra (anche ISS
e Relax).
[ 5 punti] Indicare, giustificando la risposta, quale è la complessitàdell’algoritmo proposto.
Pag. 2
PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Seconda prova in itinere di
Laboratorio di Algoritmi e Strutture Dati – Prof Carlo Blundo
Anno Accademico 2001/2002 – Matricole 6, 7, 8 e 9
Template di classi [20 punti]
Data la seguente rappresentazione interna del template di classe vettore
unsigned int _size;
unsigned int _capacity;
T* _vett;
// numero di elementi nel vettore
// numero di elementi che possiamo inserire nel vettore senza
// dover riallocare l’area di memoria puntata da _vett
// puntatore ad un array di _capacity elementi di tipo T
implementare i metodi
void insert(const T& val, unsigned int ind); // inserisce l'elemento val alla posizione ind
void push_back(T& val);
// inserisce l'elemento val alla fine del vettore
Pag. 3
PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Seconda prova in itinere di
Laboratorio di Algoritmi e Strutture Dati – Prof Carlo Blundo
Anno Accademico 2001/2002 – Matricole 6, 7, 8 e 9
4. Progetto - Gestione di una banca dati di offerte di lavoro [50 punti]
L'agenzia LAVORO PER TUTTI gestisce una banca dati di richieste ed offerte di lavoro. Gli
utenti della banca dati possono essere sia persone in cerca di occupazione (un bel giro di parole per
dire disoccupati… .) che aziende in cerca di manodopera.
Ogni persona in cerca di occupazione deve compilare un questionario in cui specifica le proprie
generalità, il tipo di lavoro richiesto e le sedi di lavoro che gli sono gradite. Un azienda in cerca di
manodopera, invece, deve indicare le qualifiche professionali delle persone che intende assumere e
le sedi di lavoro. Per ciascuna sede e qualifica deve, inoltre, indicare il numero di posti disponibili.
Il programma di gestione della banca dati deve consentire di assegnare i lavori alle persone
rispettando le preferenze espresse (in altre parole, ogni persona può accettare al più un lavoro,
mentre ogni azienda non può assumere più persone del numero di posti disponibili) e
massimizzando il numero di persone occupate.
Progettare ed implementare un programma C++ che gestisca la banca dati. Il programma deve
assegnare il maggior numero di lavori possibile. I dati relativi alle richieste di lavoro vengono letti
dai file Richieste, contenente le richieste non ancora processate, e RichiesteInevase, contenente le
vecchie richieste rimaste inevase. Analogamente, i dati relativi alle offerte di lavoro vengono letti
dai file Offerte e OfferteInevase. La lista dei lavori assegnati va inserita nel file LavoriAssegnati.
Dopo aver assegnato il maggior numero di lavori possibili, le richieste di lavoro non assegnate
devono essere registrate nel file RichiesteInevase, così come le offerte di lavoro non soddisfatte
vengono registrate nel file OfferteInevase. Il formato dei file Richieste ed Offerte è descritto in
seguito (il formato dei file OfferteInevase e RichiesteInevase è analogo).
Parte da sviluppare in aula:
[20 punti] Indicare sia le strutture dati utilizzare per risolvere il problema (come il problema può
essere rappresentato da strutture dati che conoscete) che l’algoritmo principale utilizzato
per ottenere la soluzione del problema (nome dell’algoritmo e cosa prende in input).
[25 punti] Scrivere in C++, utilizzando la libreria LEDA, l’algoritmo principale utilizzato per
ottenere la soluzione del problema (non preoccupatevi di implementare la parte di
Input/Output).
[ 5 punti] Indicare, giustificando la risposta, quale è la complessitàdell’algoritmo proposto.
NON è possibile usare gli algoritmi forniti dalla libreria LEDA per risolvere il problema. In caso la
vostra soluzione richieda l'uso di classi non "standard" (che non fanno parte di STL o LEDA),
scrivere l'interfaccia delle classi usate.
Pag. 4
PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Seconda prova in itinere di
Laboratorio di Algoritmi e Strutture Dati – Prof Carlo Blundo
Anno Accademico 2001/2002 – Matricole 6, 7, 8 e 9
Formato dell'input.
I dati dei questionari sono raccolti in due file chiamati Richieste ed Offerte. Nel file Richieste sono
raccolti i dati delle persone in cerca di lavoro. Ogni persona ha compilato il seguente modulo:
NOME: Mario
COGNOME: Rossi
LUOGO E DATA DI NASCITA: Salerno, 25/12/70
RESIDENZA: Via Roma 111, Salerno
RECAPITO TELEFONICO: 089/123456
TIPO DI LAVORO RICHIESTO: (segnare con una X le qualifiche desiderate)
Programmatore
Sistemista
Esperto Reti
Esperto Sicurezza
Web Master
Commerciale
Addetto Pubbliche Relazioni
Dirigente
SEDE DI LAVORO PREFERITA: (Indicare da una a tre cittàitaliane)
Nel file Offerte sono raccolti i dati delle aziende che offrono lavoro. Per ogni azienda esiste un
modulo compilato come segue:
NOME: Sun Italia
INDIRIZZO: Via Isonzo, Roma (RM)
RECAPITO TELEFONICO: 06/1122000
DISPONIBILITÀ POSTI: (Elencare per ogni qualifica le sedi ed i posti disponibili)
Programmatore
Sistemista
Esperto Reti
Esperto Sicurezza
Web Master
Commerciale
Addetto Pubbliche Relazioni
Dirigente
Questi dati sono memorizzati nei file Richieste ed Offerte secondo le seguenti regole: il segnale di
fine campo è rappresentato dal carattere '\n'; il segnale di fine record è rappresentato dal carattere
'@'.
Inoltre, nei files RichiesteInevase e OfferteInevase sono conservate tutte le richieste non ancora
soddisfatte. Il loro formato è uguale ai file Richieste ed Offerte rispettivamente.
Formato dell'output.
Il programma deve restituire, nel file LavoriAssegnati, l'elenco delle assegnazioni delle persone ai
posti di lavoro (potete utilizzare il formato che preferite) ed inserire tutte le richieste non soddisfatte
nei file RichiesteInevase e OfferteInevase.
Pag. 5
PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Seconda prova in itinere di
Laboratorio di Algoritmi e Strutture Dati – Prof Carlo Blundo
Anno Accademico 2001/2002 – Matricole 6, 7, 8 e 9
Pag. 6
PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Seconda prova in itinere di
Laboratorio di Algoritmi e Strutture Dati – Prof Carlo Blundo
Anno Accademico 2001/2002 – Matricole 6, 7, 8 e 9
Pag. 7
PDF created with FinePrint pdfFactory trial version http://www.fineprint.com