Programmazione per TWM: Esercitazione di laboratorio #10 (19/02)

L'obiettivo di questa esercitazione è l'approfondimento dei sottoprogrammi, o metodi (illustrati nel capitolo 5).

Raccomandazioni: Ove non altrimenti indicato, rispondete alle domande prima ragionando su carta e poi provando a editare, compilare ed eseguire. Gli esercizi etichettati con l'asterisco (*) sono più difficili: affrontateli dopo aver risolto gli altri.

Esercizio 1

Obiettivo: Comprendere il funzionamento dei parametri di tipo array, e in generale dei metodi che lavorano su array.

Attività:

  1. Nel programma seguente, completate il metodo inverti() per l'inversione di un array.
    class Inverti {
      public static void main(String[] args) {
        int[] a;
        int n;
        System.out.print("Inserisci il numero di elementi dell'array: ");
        n = EasyIn.readInt();
        a = new int[n];
        for (int i = 0; i < a.length; i++) {
          System.out.print("a[" + i + "] = ");
          a[i] = EasyIn.readInt();
        }
        inverti(a);
        System.out.println("L'array invertito e': ");
        for (int i = 0; i < a.length; i++) 
          System.out.println("a[" + i + "] = " + a[i]);
      }
    
      static void inverti(int[] array) {
        // COMPLETARE!!
      }
    }
    
    Come vedete, gli array vengono passati per riferimento. O meglio, il riferimento all'array viene passato per valore. Insomma, il risultato è che le modifiche sul parametro formale si ripercuotono sul parametro attuale.
  2. Aggiungete al programma precedente un secondo metodo inverti() con altri due argomenti, entrambi di tipo int, inizio e fine che indicano la porzione dell'array da invertire (inizio è il primo elemento della porzione e fine è l'ultimo). In questo modo, il metodo inverti() è sovraccarico. Collaudate la correttezza del programma invocando entrambi i metodi inverti(). Gestite anche, con modalità decise da voi, il caso in cui inizio è più grande di fine.
  3. Riscrivete il "primo" metodo inverti() (ossia quello con un unico argomento) usando il secondo. (il corpo di questa nuova versione del primo metodo deve essere di una riga di codice!)
  4. Aggiungete al programma precedente un terzo metodo per invertire la porzione di array non compresa fra due indici inizio e fine. Potete usare un metodo sovraccarico, quindi sempre con nome inverti()? Perché?
  5. Rifate gli esercizi precedenti definendo funzioni anziché procedure. Osservate le differenze.

Esercizio 2

Obiettivo: Comprendere il funzionamento dei metodi che lavorano su matrici (array bidimensionali).

Attività:

  1. Riprendete l'esempio nel paragrafo 5.14.3 (pagg. 138 e seguenti) modificandolo per:
  2. Modificate ancora l'esempio precedente sulle matrici e definite una funzione int[][] copiaMatrice(int[][] m) che crea una copia nuova (quindi, senza alias) della matrice m ricevuta in input.
  3. Modificate ancora l'esempio precedente sulle matrici e definite una procedura void copiaMatrice(int[][] mIn, int[][] mOut) che crea una copia nuova (quindi, senza alias) della matrice m ricevuta in input. Confrontate questa soluzione con la precedente.
  4. Definite una procedura azzeraArray(int[] a) che azzera gli elementi di un array. Poi usatela per definire altre due procedure: azzeraMatrice(int[][] m) che azzerare tutti gli elementi di una matrice bidimensionale e azzeraRigaMatrice(int[][] m, int riga) che azzera la riga indicata dal parametro formale riga dell'array array bidimensionale m. N.B. Le procedure azzeraMatrice() e azzeraRigaMatrice() devono usare (chiamare) la procedura azzeraArray(), con i parametri opportuni.
    Cosa succede? Funziona? Quindi, ricordando che gli array vengono passati per riferimento, gli elementi di array per valore (vedi il programma ParametriArray2 a pag. 129-130), cosa possiamo dire degli elementi di array che sono array? Vengono passati per valore o per riferimento? Quindi qual è la regola generale?
  5. È possibile usare il metodo azzeraArray(int[] a) precedente per azzerare gli elementi di una colonna di un array bidimensionale? Perché? Suggerimento: Riguardate la figura 4.3 a pag. 87...

Esercizio 3

Obiettivo: Cominciare a progettare un insieme di metodi di utilità generale per lavorare sugli array unidimensionali.

Attività:

  1. Scrivete un programma contenente metodi per:

Esercizio 4

Obiettivo: Imparare a progettare un metodo.

Attività:

  1. Scrivere un metodo per rendere più agevoli i seguenti compiti: Quanti metodi avete scritto? Avevo detto UNO!!
  2. Scrivere un metodo (ho detto uno!) per rendere più agevoli i seguenti compiti:

Pace! Valid XHTML 1.1! Stefano Mizzaro Last modified: Sat Jul 10 11:31:54 ora legale Europa occidentale 2004