Newsgroup: it.comp.java
Titolo: Calcolo espressioni aritmetiche

Mi chiedevo come si implementa un programma Java per il calcolo del valore
di espressioni aritmetiche ae della forma:
 
        ae::= n | X | ae+ae | ae-ae
"...dove n appartiene all'insieme N dei numeri naturali, X è una variabile
il cui valore è dato dalla funzione m: Var--> N. "
In altre parole data un espressione (una stringa) in input, bisogna
calcolarne somma o differenza, a seconda del segno.
Esempio:
5 + 3 -----> 8
5 + 3 - 4 ------> 4
6 - 1 + 3 -----> 8
7 -----> 7
Qual'è l'approccio più comune? Voi come iniziereste? E' la prima volta che
mi trovo davanti ad una cosa di questo tipo.
Grazie in anticipo, ciao :)
-- 
"It is impossible to teach good programming to students who have had a prior
exposure to BASIC: as potential programmers they are mentally mutilated
beyond hope of regeneration."
(E. W. Dijkstra)

 Qual'č l'approccio piů comune? Voi come iniziereste? 
Non ho ben capito se a te interessa calcolare X, o vedere al variare di 
X i diversi valori di una espressione.
Cmq, io partirei costruendo la classe che ti rappresenta le espressioni 
generate dalla tua grammatica; indubbiamente quello che piu' rapprenta 
una espressione e' una stringa, quindi la tua classe dovra' avere una 
stringa membro istanza che verra' settata dal costruttore.
Ovviamente il costruttore dovra' controllare la bonta' del parametro 
passato.
Successivamente potresti dargli il metodo calcola..
Insomma tipo
public class Expressione
{
private String esp = null;
	public Expressione(String s)
	{
		//controllo s e l'assegno a esp
 
	}
	public int calcola(int X)
	{
		//calcolo l'espressione dando il valore ad x..
	}
....
}
Ciao :)
Valerio

 Grazie in anticipo, ciao :)
Puoi costruire prima un parser che ti verifica la grammatica(formato delle
espressioni e poi includere una classe che effettui i calcoli. per il parser
guarda JavaCC č un generatore di parser

Ciao.
Se ho capito bene, nash ha bisogno di un programma che da una stringa
rappresentante una espressione matematica, sia in grado di calcolare
il risultato numerico.
Io ho sviluppato qualcosa di simile e l'ho in seguito integrato
in questo programmino per disegnare equazioni matematiche:
http://www.nunnisoft.ch/products-easyeq.jsp
Per sviluppare questo parser ho utilizzato un altro programmino
che distribuisco gratuitamente con licenza GPL (Open Source)
http://nunnifsmgen.nunnisoft.ch/home.jsp
Si tratta di un generatore di FSM (Finite State Machine) che uso
regolarmente.
Il metodo classico e' quello di scrivere un parser per queste stringhe
che costruisca un albero algebrico. In seguito scorrendo l'albero
si potra' calcolare il valore dell'espressione.
Buon lavoro.

4
-- 
                Roberto Nunnari -software engineer-
                     mailto:
ro...@nunnisoft.ch
 
http://www.nunnisoft.ch
   Residenza Boschetto 12           tel/fax: 
+41-91-6046511
   6935 Bosco Luganese        """    mobile: 
+41-76-3208561
   Switzerland               (o o)
========================oOO==(_)==OOo========================

 guarda JavaCC ? un generatore di parser
A me sembra un pochino esagerato costruirsi un parser per delle 
espressioni cosi banali!
Senza scomodare la teoria degli automi, delle grammatiche ecc,
per sapere se una stringa e' un espressione di quel tipo, gli basta fare 
un controllo carattere precedente, carattere successivo.
se il carattere precedente e' | dopo ci dovra' essere un
X					segno
cifra					cifra o segno
segno					X o cifra
ed il segno non puo' essere l'ultimo carattere di una stringa..
Insomma basta un quartetto di if (tromba,tastiera,chitarra,batteria) e 
si risolve il parsing!
Valerio