Programmazione per TWM: Esercitazione di laboratorio #13 (04/03)

L'obiettivo di questa esercitazione è iniziare a prendere confidenza con i tipi di dati astratti (TDA), saperli definire, creare ed usare (capitolo 7 fino a 7.4).

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: saper creare ed utilizzare un semplice tipo di dato astratto.

Attività:

  1. Considerate il tipo di dato astratto CoppiaInt (che rappresenta le coppie di interi) definito come segue:
    class CoppiaInt {
      private int x;
      private int y;
    
      public CoppiaInt(int primo, int secondo) {
        x = primo;
        y = secondo;
      }
    
      public static int getPrimo(CoppiaInt c) {
        return c.x;
      }
      public static int getSecondo(CoppiaInt c) {
        return ...;
      }
      public static void setPrimo(CoppiaInt c, int primo) {
        c.x = primo;
      }
      public static void setSecondo(CoppiaInt c, int secondo) {
        c.y = secondo;
      }
      public static void scambiaElementi(CoppiaInt c) {
        ... c.y ...;
        c.y = c.x;
        ..........;
      }
    }
    Completate il codice (indovinate un po' cosa si deve sostituire per completare il codice!?) per far in modo che tutti i metodi facciano quello che ci si aspetta.
  2. Scrivere un programma UsoCoppiaInt che, senza modificare il codice del TDA CoppiaInt, svolga le seguenti operazioni (attenzione: non svolgete tutti i punti in una sola volta, ma controllate eseguendo il programma dopo i punti b, f e h)
    1. crei una nuova coppia a=(12,56)
    2. stampi il secondo componente della coppia con il messaggio "Questo e' il secondo componente della coppia: " seguito dal numero
    3. crei una nuova coppia b=(34,111)
    4. crei una nuova coppia x con il primo componente di a ed il secondo di b
    5. crei una nuova coppia c formata da due numeri letti da tastiera
    6. stampi il primo componente di c
    7. scambi gli elementi della coppia c
    8. stampi di nuovo il primo componente di c
    9. copi il primo componente di c nel secondo di a
    10. legga un numero da tastiera e lo metta come secondo componente di b
  3. Scrivere il metodo stampaCoppiaInt(CoppiaInt c) in UsoCoppiaInt che stampa una coppia mettendo i numeri tra parentesi quadre e separati da una barra verticale (ad esempio la coppia formata da 1 e 4 viene stampata [1|4]). Modificare il programma UsoCoppiaInt dell'attività precedente per stampare le coppie dopo ogni modifica.
  4. Scrivere il medodo stampaRettangolo(CoppiaInt c) che stampa un rettangolo di asterischi con un numero di righe pari al primo componente della coppia c ed un numero di colonne pari al secondo componente. Ad esempio se lo si invoca con parametro [4|2] stamperà:
    **
    **
    **
    **	
  5. Scrivere il metodo stampaRettangoloInverso(CoppiaInt c) che stampa un rettangolo con il numero di righe pari al secondo componente della coppia e numero di colonne pari al primo componente. Il codice non deve contenere cicli, non deve essere ricorsivo, ma deve contenere solo chiamate ad altri metodi o assegnamenti.
  6. (*) Scrivere il metodo stampaRettangoloConPunto che, prese due coppie, stampa un rettangolo di asterischi delle dimensioni specificate dalla prima coppia, ma con un o nel punto specificato dalla seconda coppia. Ad esempio, se le due coppie sono [4|3] e [3|2] stamperà un rettangolo di asterischi di 4 righe per 3 colonne, con una o nella terza riga, seconda colonna:
    ***
    ***
    *o*
    ***
    Se la seconda coppia farebbe cadere il punto fuori dal rettangolo, il metodo deve stampare solo il rettangolo di asterischi.

Esercizio 2

Obiettivo: saper definire, modificare ed utilizzare i costruttori.

Attività:

  1. Aggiungere un costruttore a CoppiaInt che permetta di creare una coppia con entrambi i componenti uguali passandogli un solo parametro (ad esempio chiamando il costruttore con unico parametro 4 crea la coppia [4|4]).
  2. Aggiungere un costruttore a CoppiaInt che permetta di creare una nuova coppia da una passatagli come parametro.
  3. Modificare UsoCoppiaInt affinché
    1. crei una coppia a=(323,323) (quale costruttore va usato, secondo voi?!?) e la stampi con il metodo stampaCoppiaInt
    2. faccia una copia b di a, cambi il secondo componente con un numero letto da tastiera e stampi b con il metodo stampaCoppiaInt.
  4. (*) Aggiungere un costruttore senza parametri a CoppiaInt che permetta di creare una coppia con entrambi i componenti letti da tastiera.

Esercizio 3

Obiettivo: saper modificare ed utilizzare un tipo di dato astratto.

Attività:

  1. Modificare CoppiaInt aggiungendo un metodo che azzeri la prima componente.
  2. Modificare UsoCoppiaInt per far azzerare la prima componente di b
  3. Modificare UsoCoppiaInt per far azzerare la seconda componente di b senza utilizzare setSecondo e senza aggiungere metodi a CoppiaInt, ma utilizzando quelli che ci sono già. Stampate b per verificare il risultato.
  4. Aggiungere il metodo set che imposta le due componenti di una coppia in una volta sola.
  5. Aggiungere il metodo getSomma che restituisce la somma delle due componenti di una coppia.
  6. Aggiungere i metodi invertiPrimo e invertiSecondo che cambiano il segno delle componenti di una coppia.
  7. Modificare UsoCoppiaInt per stampare il risultato della sottrazione del primo meno il secondo componente di c utilizzando solo i metodi del TDA CoppiaInt e non l'operazione di sottrazione.

Fate l'amore e non la guerra!Valid HTML 4.01! Valid CSS! Paolo Coppola
Last modified: 2003-03-17