Foros del Web » Programando para Internet » ASP Clásico »

Resolver formulas ingresadas por el usuario

Estas en el tema de Resolver formulas ingresadas por el usuario en el foro de ASP Clásico en Foros del Web. Hola, estoy haciendo una pequeña aplicacion para resolver distintas formulas que guarda el usuario en una base de datos. Por ejemplo, para resolver esta formula ...
  #1 (permalink)  
Antiguo 29/10/2005, 15:50
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 2 meses
Puntos: 9
Resolver formulas ingresadas por el usuario

Hola, estoy haciendo una pequeña aplicacion para resolver distintas formulas que guarda el usuario en una base de datos. Por ejemplo, para resolver esta formula UTILIDAD = INGRESOS - GASTOS, no tengo problema, pero cuando el usuario tiene una formula del tipo UTILIDAD = INGRESOS - (EGRESOS + GASTOS EXTRAORDINARIOS), entonces ahí se me empieza a complicar, primero porque son tres variables las que entran en juego, y segundo por los parentesis y lo que esto implica para la resolución de la formula.
Alguien conoce algún ejemplo de como poder hacer esto?.
Estaré muy agradecido si alguien me puede mencionar algo.
Saludos a todos!.
__________________
Add, never Remove
  #2 (permalink)  
Antiguo 29/10/2005, 20:06
 
Fecha de Ingreso: mayo-2003
Mensajes: 866
Antigüedad: 21 años, 1 mes
Puntos: 0
pon algo del codigo
  #3 (permalink)  
Antiguo 30/10/2005, 07:25
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 2 meses
Puntos: 9
Acá está el código. La idea es tratar de reducir todo en diferentes expresiones compuestas de dos variables y un operador, para poder usar la función "DoOperation". El resultado de las distintas expresiones lo voy guardando en un array, y después mediante un bucle sumos esos resultados y así obtengo el total. Todavía me falta toda esa parte, ya que no puedo conseguir reducir la expresión en subexpresiones de dos variables.
Por ejemplo, si yo tengo esta formula UTILIDAD = INGRESOS - (EGRESOS + GASTOS EXTRAORDINARIOS), tendría que sacar dos subexpresiones, una sería INGRESOS, la otra sería EGRESOS + GASTOS, y unidas por el signo "-". Entonces, resuelvo primero la segunda subexpresion, guardo el resultado en un array, resuelvo la primer expresión (en este caso no merece resolución alguna), guardo el resultado en un array, y luego hago utilizo nuevamente la funcion DoOperation para sacar el total. El tema es que no me sale hacer esa subdivisión.
Quizás lo esoy encarando de una forma más complicada y existe una manera más sencilla, por eso si se te ocurre alguna otra forma de hacerlo te pido que me lo menciones.
Un saludo y gracias por tu interés.

Dim ExpressionTerms
Sub Main(pExpression)
Call GetExpressionTerms(pExpression)
Response.Write(DoOperation(ExpressionTerms(0), ExpressionTerms(2), ExpressionTerms(1)))
End Sub
Sub GetExpressionTerms(pExpression)

ExpressionTerms = Split(pExpression, " ")
End Sub
Function DoOperation(Var1, Var2, Operation)
Select Case Operation

Case "*"
DoOperation = Var1 * Var2

Case "/"
DoOperation = Var1 / Var2

Case "+"
DoOperation = Var1 + Var2

Case "-"
DoOperation = Var1 - Var2

Case "exp"
DoOperation = Var1 ^ Var2

Case "sqr"
DoOperation = Var1 ^ (1 / Var2)

End Select

End Function

e = "100 * 2"
__________________
Add, never Remove

Última edición por mariano_donati; 30/10/2005 a las 07:31
  #4 (permalink)  
Antiguo 04/11/2005, 15:51
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 2 meses
Puntos: 9
Acá encontré una referencia, está en C# .Net, pero no entiendo como lo logra. Me baje la aplicación de ejemplo y tampoco puedo entender como hacerlo. Si alguien me puede explicar como lo hace, estaré realmente agradecido.

http://www.microsoft.com/spanish/msd...s/MTJ_2579.asp
__________________
Add, never Remove
  #5 (permalink)  
Antiguo 04/11/2005, 16:07
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
MMmmmhhh si, lo que pasa es que lo hace a partir de un datatable, de esta manera tiene campos en una tabla que se llaman de acuerdo al nombre de cada uno de los elementos, despues solo utiliza la expresion para llamar a los campos y realiza la operacion, en ADO no tenemos este objeto, pero quizas con una tabla se podria resolver

finalmente el principio es el mismo:

1. determinar los valores
2. casar los valores con sus respectivos nombres
3. Realizar la operacion de acuerdo a la expresion matematica

a = 300
b = 20
c = 5
formula = sumaYmultiplica


sumaYmultiplica = a + (b * 5)


como los campos se llaman igual que las variables simplemente se realiza la operacion.
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #6 (permalink)  
Antiguo 04/11/2005, 17:07
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 2 meses
Puntos: 9
Listo U Goldman!, vos sabes que no sabía esa propiedad de los objetos DataColumn. Yo estaba realmente sorprendido al ver como conseguía el resultado, porque no veía ningún algoritmo que te deje asombrado por como trabajaba, sino que veía un par de simples lineas de código que no le podía encontrar la manera de como llegaban al resultado.
Muchas gracias U Goldman!.
Saludos!.
__________________
Add, never Remove
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 12:19.