Problemi per la lezione del 19/1
- [Interfaccia Comparable (I)] Vogliamo rendere la classe Persona comparabile, confrontando due persone sulla base della loro età (cioè, definendo una persona ≤ di un'altra se e solo se la sua età lo è). Fate in modo che la classe implementi l'interfaccia Comparable e sperimentatela, modificando il programma di esempio in modo che inserisca le persone in una SequenzaOrdinata; verificate che le persone vengono stampate in ordine di età.
- [Interfaccia Comparable (II)] Riprendete la classe Punto realizzata qualche giorno fa e rendetela comparabile, definendo un punto p minore di un punto p' se e solo se p ha modulo (distanza dall'origine) minore di p'. Questa relazione rispetta il contratto definito dall'interfaccia? (Consultate la documentazione delle API per decidere) In caso affermativo, usate SequenzaOrdinata per memorizzare una sequenza di punti e guardate come vengono ordinati.
- [Classe astratta Curva] Definite una classe astratta di nome Curva (nel pacchetto
it.unimi.mat.geometria) che corrisponda a una curva sul piano cartesiano. Questa classe deve avere:
- un metodo astratto boolean passaPer(Punto p) che dice se la curva passa per un punto dato;
- un metodo concreto boolean passaPer(Punto p[]) che restituisce true sse la curva passa per tutti i punti elencati.
- [Classe Parabola] Definite una classe Parabola che estenda Curva e le cui
istanze rappresentano parabole con retta direttrice orizzontale; la classe deve avere i seguenti costruttori e metodi:
- Parabola(): costruisce la parabola y=x^2;
- Parabola(double a, double b, double c): costruisce la parabola y=ax^2+bx+c;
- Parabola(Punto fuoco, Punto vertice): costruisce la parabola con dati fuoco e vertice (che devono avere la stessa ascissa, altrimenti il costruttore deve sollevare un'eccezione);
- double getA(): restituisce il coefficiente del termine di grado 2;
- double getB(): restituisce il coefficiente del termine di grado 1;
- double getC(): restituisce il coefficiente del termine noto;
- boolean equals(Object x): determina se la parabola è uguale a x;
- Punto getVertice(): restituisce il vertice;
- Punto getFuoco(): restituisce il fuoco;
- Retta getDirettrice(): restituisce la retta direttrice;
- boolean y(double x): restituisce il valore y per cui (x,y) appartiene alla parabola.
Suggerimento: per questa classe potrebbe essere utile consultare http://mathworld.wolfram.com/.
- [Metodo arePipppere] Due curve C e C' sono dette pipppere se e solo se esiste un x intero
compreso fra 1 e 10 tale che i punti (x,x) e (2*x,2*x) appartengono a entrambe le curve e il punto (x+1,1.5*x*x) appartiene ad almeno
una delle due curve.
Aggiungete alla classe Curva un metodo statico boolean arePipppere(Curva c1, Curva c2) che date due curve restituisce true sse le curve sono pipppere. Verificate, usando questo metodo che la retta y=x e la parabola y=-3x^2+19x-24 sono pipppere.
- [Classe Iperbole] Definite una classe Iperbole che estende Curva e le cui istanze rappresentano iperboli i cui semiassi giacciono sugli assi cartesiani. Decidete voi di quali costruttori e metodi dotarla.