Problemi per la lezione del 11/1
- [Eccezioni in Orario (I)] Modificate il costruttore della classe Orario in modo che sollevi una IllegalArgumentException (che è un'eccezione non controllata) se il numero di minuti non è compreso fra 0 e 59, o il numero di ore non è compreso fra 0 e 23. Come potrete verificare, tutto il progetto continua a compilare (perché?). Provate di nuovo la classe Orario usando un main che provochi l'eccezione.
- [Eccezioni in Orario (II)] Create una classe di eccezione controllata di nome OrarioIllegaleException e fate sollevare al costruttore di Orario un'eccezione di questo tipo anziché una IllegalArgumentException, creandola con un messaggio opportuno che spieghi se sono sbagliate le ore o i minuti. Modificate la parte restante del codice del progetto in modo che compili e provate di nuovo la classe.
- [Classe Retta] Definite una classe di nome Retta in un pacchetto di nome
it.unimi.mat.geometria, le cui istanze rappresentano rette nel piano cartesiano. Devono essere consentite rette qualsiasi
(anche parallele all'asse Y). Poiché la classe Retta usa fra l'altro dei punti, mettete nel pacchetto una copia
della classe Punto (che avete scritto alcune lezioni fa).
La classe deve fornire almeno i seguenti costruttori e metodi:
- Retta(): costruisce la bisettrice del I/III quadrante;
- Retta(double m, double q): costruisce la retta y=mx+q;
- Retta(double x): costruisce la retta parallela all'asse y e passante per (x,0);
- Retta(Retta r, Punto p): costruisce la retta parallela a r e passante per p;
- Retta(Punto p, Retta r): costruisce la retta perpendicolare a r e passante per p;
- double y(double x): restituisce il valore y tale che (x,y) sta sulla retta (e solleva un'eccezione se la retta è verticale);
- boolean isParallela(Retta r): restituisce true sse la retta è parallela a r;
- boolean isPerpendicolare(Retta r): restituisce true sse la retta è perpendicolare a r;
- boolean equals(Object x): restituisce true sse la retta è uguale a x;
- boolean passaPer(Punto p): restituisce true sse la retta passa per p;
- boolean passaPer(Punto[] p): restituisce true sse la retta passa per tutti i punti dell'array p.
- [Classe Parabola] Definite una classe Parabola 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;
- boolean passaPer(Punto p): restituisce true sse la parabola passa per p;
- boolean passaPer(Punto[] p): restituisce true sse la parabola passa per tutti i punti dell'array p.
Suggerimento: per questa classe potrebbe essere utile consultare http://mathworld.wolfram.com/.