Programmazione per TWM: Esercitazione di laboratorio #14 (05/03)

L'obiettivo di questa esercitazione è saper definire ed usare i TDA e prendere confidenza con il concetto occultamento delle informazioni (capitolo 7).

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 definire ed utilizzare TDA.

Attività:

  1. Il tipo di dato Freccia rappresenta una freccia orizzontale che può essere allungata o accorciata. Se una freccia lunga 0 viene accorciata ulteriormente, si trasforma in una freccia nel senso inverso.
    Ad esempio data la freccia --> (lunga 2), se la si accorcia di 2 si ottiene > (lunga 0); se la si accorcia ancora di uno, si ottiene <- (lunga 1).
    Definire il TDA Freccia con i metodi per
  2. Scrivere il programma UsoFreccia con un metodo per stampare le frecce e che permetta di
    1. creare una nuova freccia a lunga 3 verso destra
    2. accorciare a fino a farla essere lunga 3 ma verso sinistra
    3. creare una nuova freccia b di lunghezza e verso letti da tastiera
    4. stampare ogni volta tutte le frecce
    5. stampare il seguente disegno:
      --->--->--->
      --->--->--->
      --->--->--->
      
      (se non avete usato un ciclo avete sbagliato!)
    6. (*) stampare il seguente disegno usando una sola freccia:
      ->
      -->-->
      --->--->--->
      ---->---->---->---->
      
      (se non avete usato un ciclo che modifica la freccia avete sbagliato!)

Esercizio 2

Obiettivo: prendere confidenza con l'occultamento delle informazioni.

Attività:

  1. Il TDA Ora rappresenta un'ora del giorno in formato hh:mm.ss, dove hh è compreso tra 0 e 23, mm e ss tra 0 e 59.
    Oltre ad avere un costruttore con tre parametri di tipo byte (uno per le ore, uno per i minuti ed uno per i secondi), ha i metodi
  2. Scaricate il file Ora.class e scrivete il programma UsoTDAOra che (non fate tutto insieme, ma controllate ogni volta che aggiungete una stampa)
    1. crei una nuova ora a con i valori letti da tastiera (ricordatevi che i parametri del costruttore sono di tipo byte e non int)
    2. stampi il valore di a in formato hh:mm.ss
    3. aggiunga 3 ore ad a e poi ne stampi il valore
    4. aggiunga 32 minuti ad a e poi ne stampi il valore
    5. aggiunga 12 secondi ad a e poi ne stampi il valore
    6. aggiunga -32 ore ad a e poi ne stampi il valore
      • è quello che vi aspettavate?
  3. Implementare il TDA Ora utilizzando 3 variabili private di tipo byte, ricompilate solo il file Ora.java (javac Ora.java) ed eseguite di nuovo il programma UsoTDAOra. Funziona tutto come prima?
  4. Cambiate il codice del TDA Ora in modo che, invece di usare 3 variabili private, utilizzi un array di byte di 3 posizioni.
    Attenzione: non dovete cambiare l'intestazione dei metodi e del costruttore.
    Ricompilate solo il file Ora.java e controllate che UsoTDAOra funzioni ancora (non dovete modificarlo! Deve funzionare esattamente come faceva prima. Se non lo fa vuol dire che avete sbagliato qualcosa)
  5. Cambiate il codice del TDA Ora in modo che, invece di usare un array di byte, utilizzi una sola variabile int (che rappresenta il numero di secondi trascorsi dalla mezzanotte).
    Ricompilate solo il file Ora.java e controllate che UsoTDAOra funzioni come prima.
  6. (*) Cambiate il codice del TDA Ora in modo che, invece di usare una variabile di tipo int, utilizzi un carattere per le ore ('a' per l'ora 0, 'b' per l'ora 1,..., 'n' per l'ora 11, 'A' per l'ora 12, 'B' per l'ora 13,..., 'N' per l'ora 23) ed una variabile di tipo int per i minuti e secondi.
    Ricompilate solo il file Ora.java e controllate che UsoTDAOra funzioni come prima.
  7. (**) Aggiungere i metodi public static void togliOre(Ora o, byte h), public static void togliMinuti(Ora o, byte m) e public static void togliSecondi(Ora o, byte s) per rendere il TDA aderente alle specifiche del file TDAOra.html.
  8. (**) Modificare l'implementazione del TDA come nei punti 4, 5 e 6.

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