Paolo Boldi
Problemi per la lezione dell'11/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).
Modificate quindi la classe di prova di Persona, in modo che legga degli Studenti, e permetta di includere quindi una lista di esami svolti.
- [Classe Quadratica] Implementate una classe di nome Quadratica che rappresenta una funzione f(x) di secondo grado sui numeri reali, caratterizzata quindi dai tre coefficienti a, b e
c. Questa sfrutterà la classe Punto realizzata nella lezione precedente.
La classe deve avere i seguenti costruttori e metodi:
- Quadratica(double a, double b, double c) crea una funzione con i coefficienti specificati.
- Quadratica(double a, double b) crea una funzione con il termine noto nullo
- Quadratica(double a) crea una funzione con solo il termine a(x^2)
- String toString(): restituisce una rappresentazione testuale della funzione, del tipo "2x^2 - 3".
- boolean equals(Quadratica q): restituisce true sse i due oggetti rappresentano la medesima curva.
- Punto getIntersectionWithYAxis(): restituisce l'oggetto di tipo Punto che rappresenta l'intersezione tra la curva e l'asse Y.
- Punto[] getIntersectionWithXAxis(): restituisce un array di oggetti di tipo Punto, che rappresentano tutte le intersezioni tra la curva e l'asse X, ordinate per ascissa crescente. Suggerimento: riguardare il codice scritto per l'esercizio EquazioneSecondoGrado nella lezione del 19 Ottobre.
- double getYOf(double x): resituisce l'ordinata corrispondente all'ascissa data, per questa funzione.
- Punto getVertex(): restituisce il massimo o il minimo della funzione (a seconda che questa sia concava o convessa). Ricordiamo che questo ha ascissa pari a (-b / (2a) ). Suggerimento: sfruttate il metodo getYOf(x)
- boolean isAbove(Punto p): restituisce true sse questa curva si trova sopra il punto p.
- boolean isBelow(Punto p): restituisce true sse questa curva si trova sotto il punto p.
- boolean isIncluding(Punto p): restituisce true sse questa curva comprende il punto p.
- [Classe Proiettile] Implementate una classe di nome Proiettile che rappresenta un proiettile lanciato verso l'alto, con un certo angolo theta rispetto al terreno e una certa velocità iniziale v. Tra i propri attributi, vogliamo che contenga un oggetto Quadratica che rappresenta la funzione della traiettoria del proiettile in uno spazio bidimensionale. Ricordiamo infatti che questa equazione ha coefficienti
- a = -g / (2 * v^2 * cos(theta)^2)
- b = tan(theta)
- c = 0
dove g = 9.8 approssima l'accelerazione gravitazionale. La classe deve avere i seguenti costruttori e metodi:
- Proiettile(double theta, double v) Rappresenta un proiettile lanciato con angolo theta rispetto al terreno e velocità iniziale v.
- String toString(): restituisce una rappresentazione testuale di questo proiettile, tipo "Proiettile con traiettoria 2x^2 + 5x".
- boolean equals(Proiettile p): restituisce true sse i due oggetti rappresentano proiettili con identica traiettoria nel piano cartesiano.
- Punto getMaximumHeightPoint(): restituisce il punto del piano cartesiano dove questo proiettile raggiunge altezza massima.
- Punto getLandingPoint(): restituisce il punto del piano dove questo proiettile tocca il terreno.
- boolean isHitting(Punto p): resituisce true sse il proiettile colpisce quel punto (quindi, se il punto è nella sua traiettoria, sopra il terreno e nella direzione giusta).
Sperimentate la classe, realizzando un programma che mi dica che se un proiettile lanciato a 45 gradi d'inclinazione a 82 metri al secondo può colpire un obiettivo posto sul terreno a 690 metri da noi largo 10 metri.
Suggerimento: sfruttate il metodo getRho() della classe Punto.
[Nota: la distanza di circa 690 metri è, per uno strano caso, la stessa che separa la sede di Matematica da quella di ingegneria matematica e informatica]
- [Classe ProiettileEsplosivo] Definite una classe ProiettileEsplosivo che estenda la classe Proiettile; questo ha la particolarità di generare un'esplosione al contatto con il terreno, di raggio dato. Deve avere almeno i seguenti costruttori e metodi:
- ProiettileEsplosivo(double theta, double v, double radius): definisce un proiettile con angolo e velocità dati, e con il raggio di esplosione dato.
- boolean isHitting(Punto p): resituisce true sse il proiettile colpisce quel punto. Si noti che questo è vero se la traiettoria colpisce p, oppure se p si trova ad una certa distanza dal punto di atterraggio.
Potete anche dotare questa classe di un metodo statico che restituisca un ProiettileEsplosivo che atterri in un punto dato.