Problemi per la lezione del 13/12
- [Classe Persona] Implementate una classe di nome Persona che rappresenta una persona. Una persona
è caratterizzata dai seguenti dati: un nome, un cognome, un anno di nascita e un luogo di nascita.
Implementate la classe decidendo quale sia il costruttore, e decidendo di quali metodi dotarla. Dovete necessariamente
sovrascrivere il metodo toString() restituendo una stringa opportuna (p.es. Paolo Boldi (Cremona 1968)).
Realizzate quindi una classe di test, in cui dichiarate una sequenza, e consentite a un utente di inserire i dati di un certo numero di persone, creando ogni volta un oggetto istanza di Persona e inserendolo nella sequenza. Alla fine, stampate le persone inserite (usando un iteratore sulla sequenza).
Ecco un esempio di come potrebbe funzionare il programma (in grassetto le parti inserite dall'utente):
Nome: George
Cognome: Bush
Luogo di nascita: Tordonia
Anno di nascita: 1945
Nome: Michael
Cognome: Stipe
Luogo di nascita: Athens
Anno di nascita: 1959
Nome:
George Bush (Tordonia 1945)
Michael Stipe (Athens 1959)- [Classe Persona (continua)] Aggiungete alla classe persona i seguenti metodi:
- un metodo che restituisca l'età (in anni) della persona (usando come anno di riferimento il 2004);
- un metodo che determini se una persona è più vecchia di una persona data;
- un metodo che determini se una persona è nata nella stessa città di una persona data (le città sono due stringhe, e vanno considerate uguali sse le due stringhe coincidono).
Sperimentate i metodi inseriti, per esempio modificando il programma precedente in modo da stampare accanto a ogni persona anche la sua età, e indicando quali sono le persone che sono non più vecchie della prima inserita, e quali sono quelle che sono nate nella sua stessa città.
Nome: George
Cognome: Bush
Luogo di nascita: Tordonia
Anno di nascita: 1945
Nome: Michael
Cognome: Stipe
Luogo di nascita: Athens
Anno di nascita: 1959
Nome:
George Bush (Tordonia 1945), 59 anni
Michael Stipe (Athens 1959), 45 anni
Persone non più vecchie di George Bush (Tordonia 1945): George Bush (Tordonia 1945), Michael Stipe (Athens 1959)
Persone che sono nate dove è nato George Bush (Tordonia 1945): George Bush (Tordonia 1945)- [Sequenza di frazioni (I)] Ricordate che la classe Sequenza contiene un metodo iterator() che restituisce un Iterator per scandire la sequenza; ogni iteratore ha un metodo next() che restituisce il prossimo oggetto dell'iterazione (e passa all'oggetto successivo, se ce n'è uno), e un metodo hasNext() che restituisce un booleano che è true sse c'è almeno un altro oggetto.
Scrivete un programma che legga una sequenza di righe, ciascuna delle quali deve essere una frazione (cioè, un intero, seguito dal carattere /, seguito da un altro intero), terminata dalla riga vuota. Ciascuna frazione deve essere inserita in una sequenza, e alla fine dovete usare l'iteratore per stampare la sequenza, e per calcolare la somma delle frazioni (la quale deve essere stampata alla fine).
Ecco un esempio di funzionamento del programma (in grassetto le parti inserite dall'utente):
Frazione: 7/4
Frazione: 5/11
Frazione: 3/4
Frazione:
Sequenza: 7/4 5/11 3/4
Somma: 65/22- [Sequenza di frazioni (II)] La classe SequenzaOrdinata estende Sequenza e consente l'inserimento di oggetti che implementino l'interfaccia Comparable. Modificate il programma precedente, inserendo ogni frazione sia in una sequenza che in una sequenza ordinata. Alla fine, oltre a stampare la sequenza ottenuta usando l'iteratore della sequenza, stampate anche la sequenza ottenuta dall'iteratore della sequenza ordinata, e osservate che le due stampe differiscono solo per l'ordine: nel caso della sequenza le frazioni vengono stampate in ordine di inserimento, mentre nel caso della sequenza ordinata vengono stampate in ordine crescente.
Ecco un esempio di funzionamento del programma (in grassetto le parti inserite dall'utente):
Frazione: 7/4
Frazione: 5/11
Frazione: 3/4
Frazione:
Sequenza: 7/4 5/11 3/4
Sequenza ordinata: 5/11 3/4 7/4
Somma: 65/22- [Classe Punto] Scrivete una classe Punto le cui istanze rappresentino punti sul piano cartesiano. La classe deve avere i seguenti metodi e costruttori pubblici:
- Punto(double x, double y): costruisce il punto di coordinate (x,y)
- Punto(double x): costruisce il punto di coordinate (x,x)
- Punto(): costruisce il punto (0,0)
- double getX(): restituisce l'ascissa del punto
- double getY(): restituisce l'ordinata del punto
- void setX(double x): modifica l'ascissa del punto (rendendola uguale a x)
- void setY(double y): modifica l'ordinata del punto (rendendola uguale a y)
- void setXY(double x, double y): modifica le coordinate del punto, rendendolo uguale a (x,y)
- double getRho(): restituisce il modulo (=distanza dall'origine) del punto
- double getTheta(): restituisce la fase (in radianti) del punto (NB: il metodo statico acos(double x) della classe Math calcola l'arcocoseno di x)
- String toString(): restituisce una versione "stringa" del punto
- boolean equals(Punto p): restituisce true sse i due punti coincidono (cioè, sse hanno le stesse coordinate)
- Punto medio(Punto p): restituisce il punto medio fra il target e p
- boolean collineari(Punto p, Punto q): restituisce true sse i tre punti target, p, q sono collineari; decidede come comportarvi se i tre punti non sono distinti.
Man mano che scrivete la classe, scrivete anche una classe di prova, contenente un metodo main, che sperimenti i metodi che di volta in volta aggiungete.
Inventate almeno altri quattro metodi da aggiungere alla classe.
- [Classe Persona (continua)] Aggiungete alla classe persona i seguenti metodi: