Va bene, cercherò di spiegarmi al mio meglio
Per prima cosa, devi essere del tutto familiare con le equazioni razionali.
Hai una equazione del tipo
e vuoi convertirla con
dove
e
e b e c sono conosciuti.
Hai due equazioni (i primi due) e due sconosciute. Logicamente, non hai bisogno nè di eredità nè di loop (il primo è usata più che altro per organizzare sistemi complessi). Puoi risolvere questo con l'algebra. Devi riscrivere le equazioni in modo che
ogni sconosciuto sia messo in termini di incognite.
_______________________________________________
Risolviamo r, secondo la formula risolutiva:
- b = p + r
- b − r = p
- c = pr
- c = (b − r)∗ r
- c = br − r^2
- −r^2 + br − c = 0
-
Adesso risolviamo p:
p = c / r
Queste sono le equazioni che puoi mettere nel tuo codice per risolvere direttamente
r e
p.
Vediamo un altro esempio, ovvero dove
e
Se hai + finiresti con r = 4 e p = 10. Se hai - finiresti con r = 10 e p = 4. Allora hai:
Codice:
public class Cfzq {
public static class cfz {
public double p;
public double r;
}
// per x^2 + bx + c = 0
public static cfz cerca(final double b, final double c) {
final cfz m = new cfz();
m.r = (-b + Math.sqrt(b*b - 4*c)) / -2;
m.p = c / m.r;
return m; //restituisci
}
}
Mettici adesso un pò di testa, e ricorda di:
- Fare qualche "protezione" contro i discriminant (La discriminant è la definizione della espressione che appare sotto la radice quadrata): un semplice "Carry Handling" potrebbe bastare.
Buon lavoro.