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.
Obiettivo: saper creare ed utilizzare un semplice tipo di dato astratto.
Attività:
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.
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)
a=(12,56)
b=(34,111)
x
con il primo componente di a
ed il secondo di b
c
formata da due numeri letti da
tastierac
c
c
c
nel secondo di a
b
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.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à:
** ** ** **
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.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.
Obiettivo: saper definire, modificare ed utilizzare i costruttori.
Attività:
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]).CoppiaInt
che permetta di creare
una nuova coppia da una passatagli come parametro.UsoCoppiaInt
affinché
a=(323,323)
(quale costruttore va usato, secondo
voi?!?) e la stampi con il metodo stampaCoppiaInt
b
di a
, cambi il secondo
componente con un numero letto da tastiera e stampi b
con
il metodo stampaCoppiaInt
.CoppiaInt
che
permetta di creare una coppia con entrambi i componenti letti da tastiera.Obiettivo: saper modificare ed utilizzare un tipo di dato astratto.
Attività:
CoppiaInt
aggiungendo un metodo che azzeri la prima
componente.UsoCoppiaInt
per far azzerare la prima componente
di b
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.set
che imposta le due componenti di una
coppia in una volta sola.getSomma
che restituisce la somma delle
due componenti di una coppia.invertiPrimo
e invertiSecondo
che cambiano il segno delle componenti di una coppia.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.