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 bc formata da due numeri letti da
tastieracc cc nel secondo di a
bstampaCoppiaInt(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 stampaCoppiaIntb 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 bUsoCoppiaInt 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.
Paolo Coppola