Free University of Bolzano/Bozen
Faculty of Computer Science - Bachelor in Applied Computer Science
Introduction to Programming - A.A. 2006/2007

Esercitazione 10

Ricorsione


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:

  1. salvare il programma in una cartella del disco locale;
  2. aprire tale cartella come progetto in BlueJ (usando il comando Open Non BlueJ);
  3. compilare la classe Fibonacci;
  4. aprire il file 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);
  5. lanciare il metodo 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:

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

Soluzione