Progress - Evaluar Expresion

 
Vista:

Evaluar Expresion

Publicado por Leandro (1 intervención) el 13/04/2004 13:49:29
Hola, estoy ante un problema y les agradeceria su ayuda.

Necesito alguna forma de evaluar una expresion contenida en una cadena de texto, por ejemplo:

define variable cadena as char.
define variable resultado as dec.

assign cadena = "33 * 2".

assign resultado = EvaluarExpresion(cadena).

display resultado. /* Aca deberia mostrar 66 */

Necesitaria saber si existe alguna forma de hacer la funcion "EvaluarExpresion".
Lo que probe y anda es usando un include pasandole la cadena como parametro, pero esa solucion no es la que necesito, ya que tengo problemas en la compilacion. Este ejemplo que les muestro es un resumen del problema, me gustaria poder solucionarlo sin un include.

Desde ya muchas gracias.

Leandro.-
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Evaluar Expresion

Publicado por Gustavo Ferrer (115 intervenciones) el 22/04/2004 20:26:46
Este es un ejemplo que te puede servir modificalo y agregale para las + - / y puedes evaluar los parentesis () para ecuaciones mas complejas

FUNCTION EvaluarExpresion RETURNS decimal (INPUT cadena AS char) FORWARD.
define variable cadena as char.
define variable resultado as dec.
DEFINE VARIABLE i AS INTEGER NO-UNDO.

assign cadena = "30 * 2".

assign resultado = EvaluarExpresion(cadena).

display resultado. /* Aca deberia mostrar 66 */

FUNCTION EvaluarExpresion RETURNS DECIMAL
(INPUT cadena AS CHAR) :
/*------------------------------------------------------------------------------
Purpose:
Notes:
------------------------------------------------------------------------------*/
DEFINE VARIABLE valor AS DECIMAL NO-UNDO.
i = INDEX(cadena,"*",1).
IF i >= 1 THEN
valor = INTEGER(SUBSTRING(cadena,1,i - 1)) * INTEGER(SUBSTRING(cadena,i + 1, LENGTH(cadena) - i)).



RETURN valor. /* Function return value. */

END FUNCTION.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar