Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
Algoritmi - Algoritmo equazione
Forum - Algoritmi - Algoritmo equazione

Avatar
XBarboX (Member)
Guru


Messaggi: 945
Iscritto: 31/12/2008

Segnala al moderatore
Postato alle 9:24
Giovedì, 12/08/2010
Salve,
sto creando una calcolatrice in java. Però devo ancora pensare a un buon algoritmo per la soluzione dell'equazione data in input.
Faccio subito un esempio per far capire tutti cosa ho intenzione di fare:

input: 10+(20/2)^2
output: 110

In definitiva mi servirebbe una funziona che data una stringa("1+1") ritorna un double con il risultato dell'equazione.

Per il momento ho pensato a una funzione ricorsiva:

1)Esegui il calcolo con precedenza maggiore (Es: faccio prima la divisione e non la somma)
2)Se è rimasto ancora qualche operazione richiamami
  Altrimenti risultato = ConvertiStringInDouble(parametro);

Calcola("10+20*1-10");
Calcola("10+20-10");
Calcola("30-10");
Calcola("20");
ris = ConvertiStringInDouble("20");

Spero di essermi spiegato abbastanza bene :D

In conclusione:
Questo metodo va bene? Esiste un'altro metodo più semplice?
Insomma datemi qualche consiglio utile :rotfl:

Grazie a tutti.

PM Quote
Avatar
eddiewrc (Member)
Expert


Messaggi: 560
Iscritto: 30/04/2006

Segnala al moderatore
Postato alle 10:54
Giovedì, 12/08/2010
rappresenta l'espressione sotto forma di albero.
utilizza le interfacce per dare una discendenza comune ai vari operatori e alle variabili e implementa la risoluzione in maniera ricorsiva.

PM Quote
Avatar
XBarboX (Member)
Guru


Messaggi: 945
Iscritto: 31/12/2008

Segnala al moderatore
Postato alle 12:11
Giovedì, 12/08/2010
Scusa però non riesco a capire bene cosa intendi... come faccio a mettere un'equazione in un albero?
Potresti giusto fare un esempio?

PM Quote
Avatar
nihal (Ex-Member)
Pro


Messaggi: 109
Iscritto: 12/04/2010

Segnala al moderatore
Postato alle 12:17
Giovedì, 12/08/2010
Un'altra soluzione può essere quella di convertire l'espressione in Notazione Polacca Inversa, che è un tipo di notazione postfissa in cui gli operatori vengono dopo gli operandi (vedi pagina di Wikipedia). In questo modo, fai uno stack con gli operatori e uno con gli operandi, prendi l'operatore più in alto e l'operando più in alto, fai l'operazione e inserisci il risultato nello stack degli operandi e così via... Non so se mi sono spiegato 8-|

PM Quote
Avatar
XBarboX (Member)
Guru


Messaggi: 945
Iscritto: 31/12/2008

Segnala al moderatore
Postato alle 13:17
Giovedì, 12/08/2010
Testo quotato

Postato originariamente da nihal:

Un'altra soluzione può essere quella di convertire l'espressione in Notazione Polacca Inversa, che è un tipo di notazione postfissa in cui gli operatori vengono dopo gli operandi (vedi pagina di Wikipedia). In questo modo, fai uno stack con gli operatori e uno con gli operandi, prendi l'operatore più in alto e l'operando più in alto, fai l'operazione e inserisci il risultato nello stack degli operandi e così via... Non so se mi sono spiegato 8-|


Ottimo, adesso vedo se riesco a implementare il tutto

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 21:53
Giovedì, 12/08/2010
se vuoi un esempio con notazione polacca inversa c'è questo progetto: http://www.pierotofy.it/pages/projects/project.php?id=247

Ultima modifica effettuata da netarrow il 12/08/2010 alle 21:53
PM Quote
Avatar
gigisoft (Member)
Guru


Messaggi: 696
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 23:37
Sabato, 11/12/2010
Testo quotato

Postato originariamente da XBarboX:

Scusa però non riesco a capire bene cosa intendi... come faccio a mettere un'equazione in un albero?
Potresti giusto fare un esempio?



Salve,
tempo fa feci un programma che, trasformando un'espressione in un albero, ne calcolava il risultato;
e' tra i miei programmi su PieroTofy, e' in Delphi, ma non dovresti trovare troppe difficolta' a comprenderne il funzionamento.
Ciao. :k:

Luigi

PM Quote