FONDAMENTI DI INFORMATICA II (A-M)
ESAME SCRITTO 22 Luglio 2009
NOTE SULLO SVOLGIMENTO DELLA PROVA SCRITTA:
1. CHI HA GIA’ SUPERATO IL 1° ESONERO PUO’ SVOLGERE SOLO LA SECONDA PARTE
2. SCRIVERE IL PROPRIO NOME, COGNOME E NUMERO DI MATRICOLA IN ALTO SU OGNI FOGLIO
UTILIZZATO
3. NON E’ POSSIBILE CONSULTARE NESSUN TIPO DI DOCUMENTAZIONE
4. NON E’ POSSIBILE UTILIZZARE DISPOSITIVI ELETTRONICI
5. PRIMA DI SCRIVERE LA SOLUZIONE DELL’ESERCIZIO, INSERIRE IL NUMERO DI ESERCIZIO CHE
SI STA RISOLVENDO E LA PARTE ASSOCIATA (PER ESEMPIO “ESERCIZIO N. 1 PARTE 1”)
6. NON COPIARE DAL VICINO E NON PERMETTETE AL VICINO DI COPIARE (IN TAL CASO I DUE
COMPITI VERRANNO ANNULLATI)
7. ALLA FINE DELLA PROVA, RICONSEGNARE TUTTI I FOGLI UTILIZZATI. LA CONSEGNA DEVE
ESSERE EFFETTUATA ENTRO E NON OLTRE GLI ORARI INDICATI SULLA LAVAGNA
8. SPEGNERE I CELLULARI
a
1 PARTE
ESERCIZIO 1 (10 punti)
Sia data una immagine (costituita da 320x640 pixel) caratterizzata quindi da 320 righe di
640 interi, dove ciascun elemento indica l’intensità luminosa dei pixel di un’immagine
con range da 0 a 255. Sia data inoltre una matrice “rumore” [320][640] che si determina
dalla matrice “mat” con questa regola: se il valore medio dell’intensità dei pixel adiacenti
è maggiore o uguale all’intensità del pixel stesso, ha valore 0 altrimenti 1.
Leggere da file la matrice immagine “mat” e scrivere su file la matrice “rumore”
utilizzando le funzioni di gestione file C-like.
Implementare in C++ un programma con le seguenti funzioni:
1) Caricamento da tastiera e salvataggio dei dati nei due file “immagine.dat” (per la
matrice “mat”) e “rumore.dat” (per la matrice “rumore” )
2) Visualizzazione della riga della matrice “mat” che ha la media di intensità piu’ alta
rispetto alle altre righe
3) Correzione dell’intensità (filtraggio), diminuendo di 1 l’intensità dei pixel che hanno 1
come indice di rumore
4) Ordinamento in ordine decrescente di intensità media delle righe della matrice “mat”
ottenuta dopo il filtraggio del passo 3, salvandola quindi su file di nome “filtr.dat”
ESERCIZIO 2 (4 punti)
Scrivere un programma in C++ con una funzione che prenda in ingresso una matrice di
numeri reali “mat” di dimensione n x n. La funzione deve restituire una matrice “trasp”
determinata dalla trasposta della matrice “mat” secondo la diagonale principale. Inoltre
implementare una funzione per verificare se la matrice “mat” è simmetrica, ossia se è
uguale alla sua trasposta “trasp”. L’esercizio deve essere risolto allocando
dinamicamente la memoria per le matrici “mat” e “trasp”.
ESERCIZIO 3 (2 punti)
Indicare che cosa si intende in C++ per variabile “reference” e variabile “puntatore”,
facendo degli esempi. Inoltre indicare le differenze (vantaggi/svantaggi) nell’usare i
“reference” o i “puntatori”.
1
FONDAMENTI DI INFORMATICA II (A-M)
ESAME SCRITTO 22 Luglio 2009
1a PARTE
ESERCIZIO 4 (3 punti)
Descrivere la sintassi in C++ della macro “assert” e le modalità di utilizzo illustrando
alcuni esempi.
ESERCIZIO 5 (4 punti)
Scrivere la seguente funzione ricorsiva in C++:
void hiphurra(int k) che stampa k “hip” seguiti da k “hurra”. Ad esempio hiphurra(3)
stampa: hip hip hip hurra hurra hurra
Modificare la funzione hiphurra(int k) per stampare a video la sequenza (per esempio
k=3):
hip hip hip ! hurra hurra hurra
ESERCIZIO 6 (4 punti)
Dato un array di interi A={43, 81, 2, 80, 42, 23, 9, 30), implementare una funzione che
utilizza l’algoritmo di bubblesort per l’ordinamento decrescente. Descrivere il
funzionamento dell’algoritmo e illustrare passo per passo come viene ordinato l’array
utilizzando il suddetto algoritmo.
ESERCIZIO 7 (3 punti)
Calcolare la complessità computazionale del seguente algoritmo:
int calcola(int v[ ],int n)
{
int i=0;
while(i<n) {
if (v[i]!= k) {
v[i] = (v[i] * v[i]) /3;
}
else {
v[i] = (v[i] * v[i]) /2 ;
return 1;
}
i=i+1;
}
return 0;
}
In particolare, dopo aver descritto il significato di O( ), Ω( ) e Θ( ), definire queste
funzioni per il suddetto algoritmo.
2
FONDAMENTI DI INFORMATICA II (A-M)
ESAME SCRITTO 22 Luglio 2009
2a PARTE
ESERCIZIO 1 (9 punti)
Per un grande parcheggio di auto multipiano di un aeroporto, implementare un
applicativo gestionale che utilizza le seguenti classi:
a. Piano (idPiano, numero_piano, capienza, indirizzo, città, telefono, fax)
con i metodi : get e set degli attributi privati + costruttore/distruttore
b. Auto (idAuto, modello, marca, targa, anno_imatricolazione, data_ora_ingresso,
data_ora_uscita, posto_auto, settore, idPiano)
con i metodi : get e set degli attributi privati + costruttore/distruttore
c. Autovettura derivata da Auto con l’attributo privato numero_posti e i relativi metodi get
e set (eventualmente in overloading)
d. Furgone derivata da Auto con l’attributo privato max_carico e i relativi metodi get e set
(eventualmente in overloading)
Il parcheggio è gestito tramite una array di oggetti Autovettura con 1500 entità, un array
di oggetti Furgone con 500 entità e un array di 7 oggetti Piano.
Implementare in linguaggio C++ (gestione file stream C++) il programma con le seguenti
funzioni:
1) Caricamento da tastiera e salvataggio dei dati nei file “piani.dat”, “autovetture.dat” e
“furgoni.dat” (con modalità accesso sequenziale)
2) Stampa su stampante della targa del furgone che è entrato per ultimo
(data_ora_ingresso piu’ recente) e la capienza del piano in cui è parcheggiato
3) Cancellazione logica dal file “autovetture.dat” dell’autovettura con targa =”CE 871 AB”
(con modalità ad accesso sequenziale)
4) Ordinamento del file “furgoni.dat” (con modalità ad accesso diretto) in ordine
crescente di max_carico.
ESERCIZIO 2 (2 punti)
Considerando l’esercizio precedente introdurre per la classe Furgone l’overloading
dell'operatore ‘-’ per ridurre l’attributo max_carico della quantità passata in input al
metodo di overloading.
3
FONDAMENTI DI INFORMATICA II (A-M)
ESAME SCRITTO 22 Luglio 2009
2a PARTE
ESERCIZIO 3 (4 punti)
Implementare una classe template in C++ che abbia i seguenti membri :
1) tabella di 50 elementi, ciascuno costituito da tre numeri (giorno, mese e anno);
2) “get” dei dati dalla tabella;
3) “set” dei dati nella tabella;
4) metodo per l’ordinamento in ordine temporale crescente degli elementi nella tabella
Infine indicare le operazioni riguardanti la compilazione con i relativi metodi di gestione
delle classi template.
ESERCIZIO 4 (6 punti)
Implementare una classe che permetta di gestire una coda di interi mediante una lista
doppiamente linkata che, oltre ai metodi tradizionali (pop, push), implementi le seguenti
funzioni:
a) funzione friend per calcolare la media degli elementi di valore pari all’interno della
coda
b) funzione friend per prelevare un elemento e contemporaneamente inserire un
elemento all’interno della coda
ESERCIZIO 5 (3 punti)
Implementare l’esercizio n.4 utilizzando il contenitore list della STL. Illustrare infine i
contenitori piu’ comuni della STL.
ESERCIZIO 6 (3 punti)
Implementare una pagina web con una form che richiama uno script CGI implementato in
C++ con le seguenti funzionalità:
1) Dati in input la base minore, la base maggiore e l’altezza di un trapezio rettangolo
(forniti tramite tre numeri interi in una web form con il metodo get), determinare il
perimetro e l’area del trapezio (da fornire al client)
ESERCIZIO 7 (3 punti)
Considerata una Windows Form in C++ con tre “textbox” e un “button” (e le relative
“label”), indicare i passi da compiere per gestire la finestra implementando le seguenti
funzionalità:
1) acquisire i dati dalle prime due “textbox”, supponendo di avere due dati di tipo intero
2) visualizzare il dato nella terza “textbox”, ottenuto dalla media dei due dati acquisiti in
precedenza
4
Scarica

Traccia Esame 22lug09