Fondamenti di Informatica I / Fondamenti di Programmazione Prova scritta del 22 settembre 2010
Esercizio 1 (punti 15) Un file contiene una sequenza (di lunghezza massima 1000) di interi separati da una virgola e uno spazio. Come esempio, si consideri il seguente file
14, -3, 14, 7, 91, 12, 14, -3, 2, 14, 1, 4
Si scriva una funzione C che prenda come parametri i nomi di due file siffatti e restituisca 1 se essi contengono esattamente gli stessi valori, 0 altrimenti. Nel caso in cui un valore compaia pi`u volte, il numero di occorrenze deve essere lo stesso nei due file. L’ordine con cui compaiono non `e significativo.
Ad esempio, se i due file passati come parametri sono quello mostrato sopra e il seguente -3, 14, 1, 7, 4, 14, 12, -2, 14, 91, 3
la funzione deve restituire 0 in quanto il valore 14 compare 4 volte nel primo file e 3 nel secondo.
Esercizio 2 (punti 15) Le immagini bitmap sono rappresentate mediante una matrice di punti (pixel) ciascuno dei quali `e descritto da una tripletta di colori RGB, che contiene i valori di intensit`a, da 0 a 255, dei tre colori fondamentali: rosso, verde e blu. Si considerino dei file bitmap organizzati come segue: la prima riga contiene, nell’ordine, i due numeri interi N e M che rappresentano il numero di righe e il numero di colonne della matrice di pixel; poi il file contiene le triplette che rappresentano i pixel (un pixel per riga) a partire dalla prima riga, prima colonna (pixel in alto a sinistra nell’immagine), e procedendo con tutte le colonne della riga. Ogni pixel `e rappresentato dai tre numeri nella sequenza:
rosso, verde, blu.
Ad esempio, il file seguente rappresenta un’immagine 4 × 3 (4 righe e 3 colonne) con un punto in alto a sinistra bianco (i tre colori sono al massimo dell’intensit`a) e il resto della prima riga nero (tutti zeri); poi una riga grigia, e due righe con punti rossi (255, 0, 0), verdi (0, 255, 0), blu (0, 0, 255), azzurri (0, 255, 255), gialli (255, 255, 0) e magenta (255, 0, 255).
4 3
255 255 255
0 0 0
0 0 0
127 127 127 127 127 127 127 127 127 255 0 0 0 255 0 0 255 255 0 0 255 255 255 0 255 0 255
Si considerino inoltre le seguenti definizioni di tipo che rappresentano rispettivamente un pixel e una associazione tra un valore intero (che rappresenta l’altitudine) ed un pixel.
struct Pixel struct Colore
{ {
int r; struct Pixel pixel;
int g; int altitudine;
int b; };
};
Si scriva una funzione C che prenda come parametri:
• una matrice quadrata di interi m (che rappresenta l’altitudine di una zona di terreno) e la sua dimensione n (al massimo 100);
• il nome di un file di uscita;
• un vettore v di tipo struct Colore e la sua dimensione k.
La funzione deve scrivere sul file l’immagine bitmap corrispondente alla matrice m sostituendo a ciascun valore di altitudine la tripletta corrispondente nel vettore v.