Ir al contenido


Foto

Convertir cadena en fórmula


  • Por favor identifícate para responder
9 respuestas en este tema

#1 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 23 noviembre 2011 - 09:17

Buenas buenas a todos y todas en la comunidad...

Ando aquí con tal vez una sencilla pregunta pero de la cual me gustaría saber su opinión...

Tengo una tabla que almacenará fórmulas matemáticas que después necesito utilizar, algo así:


ID_FORMULA    DESCRIPCION    FORMULA
-----------------------------------------------------------------------
    1                CIRCULO            (3.1416)*(valor)*(valor)
    2                CUADRADO          (valor)*(valor)


Obviamente el campo de la formula es un string, pero mi idea es recuperar esa fórmula y convertirla en realmente una fórmula para ser utilizada desde Delphi... algo así:



delphi
  1. var
  2.   Valor, Resultado: Double;
  3. begin
  4.       //Recupera la fórmula... aquí llegan mis dudas
  5.       Valor := 4.5670
  6.       Resultado := (Valor) * (Valor) // La cadena recuperada ya funciona como fórmula...
  7. end;



Se me ocurrió algo como un pequeño autómata pero luego pensé que tal vez estaba re-inventando la rueda  *-) ...

Ideas amigos y amigas  8-|

Saludox ! :)


     
     

  • 0

#2 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 24 noviembre 2011 - 02:02

Hola Fenareth, no te seria mejor, crear una unit o funciones, con las formulas, y  relalizar llamadas, o preparar un form con un pagecontrol con lo que necetitas para cada formula.
  • 0

#3 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 24 noviembre 2011 - 03:12

Hola.

Yo utilizaría un motor de Scripts Pascal que pueda integrar en la aplicación.

Los hay libres : http://code.google.com/p/dwscript/

Y comerciales : http://www.fast-repo...ast-script.html

Saludos.
  • 0

#4 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 24 noviembre 2011 - 07:10

Creo que para hacerlo con lo que hay a la mano, lo más sensato sería hacer las funciones con sus respectivos parámetros y llamarlas en función del polígono y el tipo de cálculo.
Yo cambiaría un poco la estructura de las tablas, el campo fórmula sería más  informativo que operacional. Todo esto en el caso de que necesites mostrar los resultados de los cálculos en pantalla, porque si es para almacenarlos, sería más fácil, agregaríamos  a la tabla fórmulas campos 'OPERANDO_UNO'. 'OPERANDO_DOS', 'OPERANDO_N',  como fuera necesario más un campo 'RESULTADO y un trigger o un procedimiento almacenado haría fácilmente los cálculos.



POLIGONOS




ID_POLIGONO    POLIGONO   
-------------------------------------
    1                CIRCULO           
    2                CUADRADO


FORMULAS


ID_FORMULA    ID_POLIGONO      TIPO_CALCULO  FORMULA         
------------------------------------------------------------------------------------------
    1                2                                AREA              (LADO)*(LADO)                                                                                         
    2                2                            PERIMETRO        LADO * 4


Saludos

  • 0

#5 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 24 noviembre 2011 - 08:10

Hola Fena, yo también apoyo la idea de Desart, es mucho más simple manejar las operaciones como son, de lo contrario tendrías que "jugar" mucho con la cadena para recuperar su contenido y determinar que es y que no en la fórmula (casi un autómata como dices). En la forma de la Unit solo tendrías que hallar con algún procedimiento que elección de fórmula corresponde y de allí hacer la operación, igual esta en su estructura podría seguir en la base de datos a manera de información, asi no tienes que cambiar nada allí.


Saludos!
  • 0

#6 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 24 noviembre 2011 - 08:51

Hola Fenareth, no te seria mejor, crear una unit o funciones, con las formulas, y  relalizar llamadas, o preparar un form con un pagecontrol con lo que necetitas para cada formula.


Hola Fena, yo también apoyo la idea de Desart, es mucho más simple manejar las operaciones como son, de lo contrario tendrías que "jugar" mucho con la cadena para recuperar su contenido y determinar que es y que no en la fórmula (casi un autómata como dices). En la forma de la Unit solo tendrías que hallar con algún procedimiento que elección de fórmula corresponde y de allí hacer la operación, igual esta en su estructura podría seguir en la base de datos a manera de información, asi no tienes que cambiar nada allí.


Saludos!


Lo sé... la situación es que el usuario final de la aplicación desea poder tener control en las fórmulas que se introducen en la tabla y de esa manera agregar o modificar a placer lo que necesite... pero también puedo decirle que está más loco que una cabra  :p :D

Hola.

Yo utilizaría un motor de Scripts Pascal que pueda integrar en la aplicación.

Los hay libres : http://code.google.com/p/dwscript/

Y comerciales : http://www.fast-repo...ast-script.html

Saludos.


Suena interesante la opción.. le echaré un vistazo amigo Marc  (y)

Creo que para hacerlo con lo que hay a la mano, lo más sensato sería hacer las funciones con sus respectivos parámetros y llamarlas en función del polígono y el tipo de cálculo.
....


Al final amigo Wilson, se recuperaría una cadena que tendría que "traducir" de alguna manera para que se haga operativa  :(


Gracias a todos por sus ideas amigos  (y) , iré probando cosas y ya les platicaré en qué quedó el extraño caso de la cadena hecha fórmula  :D :D :D ... Claro, si tienen más ideas... sean bienvenidas !!!  ;)

Saludox ! :)
  • 0

#7 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 24 noviembre 2011 - 09:08

En este sitio puedes encontrar diferentes parsers de fórmulas matemáticas.

http://www.efg2.com/...ons/Parsers.htm
  • 0

#8 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 24 noviembre 2011 - 09:15

Bueno... según eso, sea como se haga el usuario final quiere tener el poder si quisiera de decir por ejemplo que para sumar dos números (numero1 y numero2) debe hacer: ((numero1 + numero2) * ((numero3 - numero1) + (numero1))) / numero3 ... de locos :D

Algo que podrias intentar es, creando una tabla más construir el contenido de la operación, ejemplo:

CUADRADO ---> FORMULA, donde fórmula contendria:

-----------------------------------
| Id_op |  Tipo        | Valor |
-----------------------------------
|    1    | Numero    | Null    |
-----------------------------------
|    1    | Operador |    *    |
-----------------------------------
|    1    | Numero    | Null    |
-----------------------------------

Asi recuperas cada parte de la operación independientemente e identificando a que corresponde, obviamente los valores null serán lo que cambiarían con la cifra que se ingrese para tal cálculo.
Podría funcionar....


Saludos!
  • 0

#9 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 24 noviembre 2011 - 10:08

Fenareth, creo que es relativamente fácil de poder hacer, a ver que te parece mi idea, dentro de la base de datos, creas un campo, para el tipo de formula, otro para el número de parámetros usados y un último Tipo Memo para guardar en el los parámetros, guardados por separadores o lineas, (los demás campos a tú elección), de esta manera si quiere ver la formula, sabiendo el nombre de esta llamas a la funcion adecuada, cargas los diversos parámetros y listo, se puede ejecutar, modificar, etc..

No digo que no tenga trabajo, simplemente, que sería el trabajo lógico del programador, con la petición del Cliente.
  • 0

#10 markdelphi

markdelphi

    Advanced Member

  • Moderadores
  • PipPipPip
  • 97 mensajes
  • LocationMéxico

Escrito 24 noviembre 2011 - 12:52

Hola Fenareth:

Yo hice esto hace ya algún tiempo para un programa para laboratorios de análisis clínicos, en el cuál el quimico necesitaba crear formulas para calcular los resultados. Utilice el componente JvInterpreterProgram de la suite JEDI y la verdad me funciono muy bien, hace exactamente lo que quieres le pasas la formula como cadena y te devuelve el resultado, aparte de esto también te indica si hay algún error (sintactico) en la formula, la verdad te lo recomiendo ya que yo ya lo tengo implementado.
  • 0




IP.Board spam blocked by CleanTalk.