Foros del Web » Programación para mayores de 30 ;) » Java »

Ejecutar funcion

Estas en el tema de Ejecutar funcion en el foro de Java en Foros del Web. Hola, tengo un problema a resolver: Necesito ejecutar una formula del tipo (((a+b)*0.25)*.015) + c - d Lo que consulto es si alguien sabe de ...
  #1 (permalink)  
Antiguo 13/10/2011, 10:02
Avatar de pyanqn  
Fecha de Ingreso: noviembre-2005
Mensajes: 331
Antigüedad: 18 años, 5 meses
Puntos: 8
Pregunta Ejecutar funcion

Hola, tengo un problema a resolver:

Necesito ejecutar una formula del tipo (((a+b)*0.25)*.015) + c - d

Lo que consulto es si alguien sabe de una librería que pueda resolver algo por el estilo de arriba.
La formula estará almacenada como string y simplemente se deben asignar valores a las variables, pero necesitaría un motor capaz de ejecutarla y devolverme el resultado.

¿ alguien sabe de algo así o se le ocurre alguna idea para resolver esto?

Saludos
__________________
Software Neuquén
  #2 (permalink)  
Antiguo 13/10/2011, 10:59
Avatar de DeeR  
Fecha de Ingreso: diciembre-2003
Ubicación: Santiago
Mensajes: 520
Antigüedad: 20 años, 4 meses
Puntos: 17
Respuesta: Ejecutar funcion

Solo veo un par de razones para tener la formula a evaluar anotada en un String (ex: si cambia, alamacenada en una db, etc ..).

En ese caso, lo que necesitas es un parser de la notación infijo, que sea capaz de detectar los tokens, operador, operadores, etc. además apaz de evaluar la expresión.


De hecho podrías buscar en la red informacion sobre

Java parser Infix notation
Shunting-yard algorithm

Esté último algoritmo es capaz de evaluar un expresión escrita en notación infijo.

Revisa http://www.chris-j.co.uk/parsing.php, ya que es un applet que es apaz de evaluar una expresión en notación infijo a través del algoritmo Shunting-yard algorithm (no encontre el fuente del applet xD)



Saludos
  #3 (permalink)  
Antiguo 13/10/2011, 11:05
Avatar de DeeR  
Fecha de Ingreso: diciembre-2003
Ubicación: Santiago
Mensajes: 520
Antigüedad: 20 años, 4 meses
Puntos: 17
Respuesta: Ejecutar funcion

Aquí encontre otra implementación con el código fuente

http://andreinc.net/2010/10/05/conve...ard-algorithm/


Saludos
  #4 (permalink)  
Antiguo 13/10/2011, 17:57
Avatar de pyanqn  
Fecha de Ingreso: noviembre-2005
Mensajes: 331
Antigüedad: 18 años, 5 meses
Puntos: 8
De acuerdo Respuesta: Ejecutar funcion

Muchas gracias por la colaboración.
Te comento... Justamente el tema es que es necesario almacenar una formula en la base de datos para cada registro de mi aplicación. Dicha formula será evaluada en diferentes momentos y cabe la posibilidad de que sea modificada por el usuario.

Al respecto encontre :

http://www.singularsys.com/jep/ JEP es una librería que hace lo que necesito pero es paga, existe JEPLite que es GNU pero aparentemente ha sido descontinuada.

Sigo en la búsqueda de librerías similares LGPL.

Gracias
__________________
Software Neuquén
  #5 (permalink)  
Antiguo 13/10/2011, 19:02
Avatar de pyanqn  
Fecha de Ingreso: noviembre-2005
Mensajes: 331
Antigüedad: 18 años, 5 meses
Puntos: 8
De acuerdo Respuesta: Ejecutar funcion

Comento como resolvi el problema.

Encontré una librería llamada symja que permite la ejecución de expresiones matemáticas infijas.

Como mis expresiones contienen variables, estas las obtengo de una clase asociada que contiene los parámetros y simplemente hago un replaceAll sobre el srtring para cada variable que tengo.

finalmente resuelvo la expresión:

Ejemplo

DoubleEvaluator engine = new DoubleEvaluator();
double d = engine.evaluate("((5 + 45)*(4- 6))*8 + 7");
System.out.println("Resultado:"+Double.toString(d) );


http://code.google.com/p/symja/wiki/...pressionParser
__________________
Software Neuquén

Etiquetas: funcion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:48.