Paolo Boldi
Problemi per la lezione del 9/12
- [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 15 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 Orario] Implementate una classe di nome Orario che rappresenta un orario, specificato
come ore e minuti. Internamente, la classe deve mantenere un singolo attributo intero (privato) che rappresenta i minuti trascorsi dalla mezzanotte. (In realtà,
per la realizzazione degli ultimi due metodi indicati sarà necessario aggiungere altri attributi, il cui tipo e significato sono soggetti a vostra valutazione)
La classe deve avere i seguenti costruttori e metodi:
- Orario(int h, int m): costruisce l'orario h:m (h deve essere compreso fra 0 e 23, e m deve essere compreso fra 0 e 59; decidete
come comportarvi se queste condizioni non si verificano);
- Orario(int h): costruisce l'orario h:00
- Orario(): costruisce l'orario corrispondente all'ora attuale; per ottenere tale orario, tenete conto che:
- l'ora attuale si può ottenere con l'istruzione (new GregorianCalendar()).get(Calendar.HOUR_OF_DAY)
- i minuti attuali si possono ottenere con l'istruzione (new GregorianCalendar()).get(Calendar.MINUTE)
- int getOre(): restituisce le ore
- int getMinuti(): restituisce i minuti
- void setOre(int h): cambia le ore, lasciando i minuti invariati
- void setMinuti(int m): cambia i minuti, lasciando le ore invariate
- void setOreMinuti(int h, int m): cambia sia le ore che i minuti
- boolean equals(Orario x): restituisce true sse l'orario su cui è invocato è uguale a x
- int compareTo(Orario x): restituisce un valore negativo se l'orario su cui è invocato viene prima di x, 0 se i due
orari sono uguali, e un valore maggiore di zero se l'orario su cui è invcoato viene dopo
- int quantoManca(Orario x): restituisce il numero di minuti dall'orario target all'orario x (sarà un valore negativo
se x viene prima dell'orario attuale)
- String toString(): restituisce una stringa della forma h:m
- void setSeparatore(char separatore): permette di scegliere con che separatore stampare l'orario (da ora in
avanti verrà usato come separatore il carattere indicato, anziché nel metodo toString())
- void setFormato(boolean formato24): permette di scegliere se stampare l'orario (da ora in poi) nel formato
24 ore, oppure nel formato 12 ore: in questo caso, il metodo toString() dovrà restituire ore della forma
"h:m AM" oppure "h:m PM" (al posto dei : ovviamente dovrete usare il separatore specificato).
Sperimentate la classe, realizzando un programma di test.