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