Problemi per la lezione del 12/12
- [Classe Studente] Definite una classe Studente che estenda la classe
Persona; la classe deve avere come attributi il corso di laurea, un ArrayList<String> con
la lista degli esami fatti, e l'anno di immatricolazione. La classe deve avere i seguenti costruttori e metodi:
- Studente(String nome, String cognome, String luogoNascita, int annoNascita, String corsoDiLaurea, int annoImmatricolazione): costruisce uno Studente con anno immatricolazione dato, corso di laurea dato, e lista degli esami fatti vuota.
- Studente(String nome, String cognome, String luogoNascita, int annoNascita, String corsoDiLaurea): costruisce uno Studente con anno immatricolazione uguale all'anno corrente, corso di laurea dato, e lista degli esami fatti vuota.
- void addCourse(String course): aggiunge alla lista degli esami il corso specificato;
- Object[] getCourses(): ritorna un array contente tutti gli esami fatti (usate il metodo toArray() di ArrayList);
- int getNumberOfCourses(): ritorna il numero totale di esami fatti;
- boolean isCompletedCourse(String course): restituisce true sse il corso specificato compare nella lista degli esami fatti.
- boolean isInCorso(): restituisce true sse l'anno di immatricolazione è al più 3 anni fa;
- double getAverageCoursesPerYear(): ritorna il numero medio di esami fatti per anni trascorsi dall'anno di immatricolazione (arrotondati per eccesso: se l'anno di immatricolazione coincide con l'anno corrente, contiamo 1 anno).
- [Classe Retta] Definite una classe di nome Retta 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 progetto 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 (se ne siete capaci, fate in modo che sollevi 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;
- double 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/.
- [Classe astratta Curva] Definite una classe astratta di nome Curva
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] Fate in modo che le classi Parabola e Retta estendano Curva.
- [Metodo tuttePassanoPer] Definite un metodo statico che prenda un array di curve e un punto e restituisca true sse tutte le curve passano per quel punto. Sperimentate il metodo con un array che contenga almeno due parabole e due rette.