Ciao ragazzi,
penso di aver già preso una strada per risolvere questo problema:
prima di tutto ho la classe abstract "Espressione" con i metodi "semplifica","derivata","espressioneToString"
codice:
abstract public class Espressione {
static Espressione semplifica(Espressione e){
....//ancora da implementare
}
static void derivata(){
...//ancora da implementare
}
static String espressioneToString(Espressione e) {
if(e instanceof Variabile){
return ((Variabile)e).variabile();
}
else
if(e instanceof Negazione){
return "-" + espressioneToString(((Negazione)e).operando());
}
else
if(e instanceof Somma){
return espressioneToString(((Somma)e).operando1()) +
" + " + espressioneToString(((Somma)e).operando2());
}
....ecc.
if(e instanceof Costante){
double c = ((Costante)e).getValore();
String str = new String(String.valueOf(c));
return (str);
}
return (" ");
}
}
poi tutte le altre classi (una per ogni operazione tra espressioni) in numero limitato:
"Somma","Sottrazione","Divisione","Moltiplicazione ","Negazione","Variabile","Costante","Seno","Cosen o","Tangente","Esponente" e "Ln".
poi sulla faccio una cosa del genere:
codice:
void main(){
...
//test stampa espressione: sin(2^x-y)/(ln(x))
Espressione myExp = new Divisione(new Seno(new Sottrazione(new Esponente(new Costante(2.0), new Variabile("x")),new Variabile("y"))),new Ln(new Variabile("x")) );
System.out.println("\nStampa espressione: "+ Espressione.espressioneToString(myExp));
/****************OUTPUT************************
* Stampa espressione: sin(2.0^x - y) / ln(x)
*
**********************************************
mi serve da implementare:
"semplifica" e "derivata"
idee?!