Esercizio 10A
Seguire l'evoluzione della pila dei record di attivazione usando il debugger
di BlueJ per il programma
Fibonacci.java.
Per fare ciò, procedere come segue:
Open Non BlueJ);
Fibonacci;
Fibonacci.java e mettere un breakpoint alla
linea 4 (prima istruzione del metodo fibonacci); per mettere un
breakpoint ad un'istruzione, posizionare il cursore sull'istruzione e
usare il comando Set/Clear Breakpoint del menu
Tools (oppure cliccare semplimente sul bordo sinistro
accanto all'istruzione);
main eseguendo le istruzioni passo/passo
(utilizzare i pulsanti Step, Step Into
e Continue della finestra del debugger).
Si noti, in particolare, come ciascuna attivazione di fibonacci
rimanga sospeso nel punto in cui ha effettuato una delle due attivazioni
ricorsive, e come dopo il ritorno dalla prima attivazione ricorsiva venga
eseguita la seconda attivazione ricorsiva.
Esercizio 10B
Una immagine monocromatica puù essere rappresentato come matrice i cui elementi sono
0 o 1. Se l'immagine viene per esempio visualizzata su uno schermo,
1 corrisponde ad un punto acceso e 0 corrisponde ad un punto spento.
In gergo i punti si chiamano pixel e la matrice di 0 e 1 si
chiama bitmap.
Implementare una classe Map che rappresenta una immagine monocromatica
come bitmap. Per semplicità, gli elementi della matrice possono essere di
tipo int. Oltre al costruttore, la classe Map
dovrebbe essere dotata dei seguenti due metodi:
toString restituisce una stringa che rappresenta la bitmap in modo
testuale - per esempio: 0 può essere dato come spazio (" ") e 1
come cancelletto ("#");riempi, che dati come parametri la riga r
e la colonna c riempie l'area connessa di pixel di valore 0 delimitata da
pixel di valore 1 o dai bordi della bitmap, di cui l'elemento (r, c) fa
parte - quest'operazione in gergo è chiamata floodfill.
Scrivere una classe Main che crea un oggetto Map a partire
dalla matrice data:
int[][] image =
{
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
{ 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
{ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
{ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
{ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
{ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 },
{ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 },
{ 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};
Stampare Map prima e dopo aver chiamato il metodo riempi
passando la riga 6 e la colonna 6.
Il risultato dovrebbe essere questo:
####
### ## #
# ### #
# #
# #
# #
# #
# #
#### #
# #
# #
## #
#####
prima della chiamata
####
### #######
#############
##############
###############
###############
###############
###############
##############
#########
#########
########
#####
dopo la chiamata