FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
¿Reconocedor de funciones?
¡Saludos!
Estoy haciendo un programa al cual le pueda ingresar funciones mediante el teclado (a través de un edit, por ejemplo) y hacer que el programa reconozca la cadena como una función (si le escribo por ejemplo "sen(x^2+1)") y que luego me grafique la función puesta. Sé cómo hacer para graficarla, pero no he podido hacer que reconozca el texto ingresado. ¿Alguien me puede ayudar? He intentado varias cosas y he tenido algunos "éxitos".....casi..... |
#2
|
||||
|
||||
Mira este hilo, creo que la solucion que propone Roman puede servirte de iniciacion a tu problema:
http://www.clubdelphi.com/foros/show...ht=matchesmask |
#3
|
|||
|
|||
Hola:
Bueno, creo que a lo que se refiere Magneto es a identificar los comandos que se escriben en el Edit y a traducirlo en operaciones matemáticas. Lo que pides te va a costar un poco bastante de implementar, aunque seguro que ya hay por ahí algo hecho. Si te sirve de orientación mírate la clase TParser en la unit classes, y mejor aún la clase TExprParser en la unit dbcommon que es utilizada por Delphi para analizar sentencias SQL. Te puede servir como ejemplo para ir desmenuzando los elementos de una cadena en operaciones simples. A modo de orientación, deberás definirte un conjunto de todas las operaciones posibles, y a medida que vas desmenuzando la cadena, ir almacenando las operaciones en un array (junto a los factores / sumandos ... asociados), por orden de ejecución (mirar los paréntesis) para luego pasarle a una rutina inteligente ese array y que te genere coordenadas Y, a partir de coordenadas X. Un ejemplo al vuelo de esto último: Código:
TOperacion = (opSuma, opResta, opProducto, opDivision); TNodoOperacion = class private FOperacion : TOperacion; public constructor Create (AOperacion : TOperacion); function DevuelveValor (AParametros: array of Double) : Double; end; constructor TNodoOperacion.Create (AOperacion : TOperacion); begin FOperacion := AOperacion; end; function TNodoOperacion.DevuelveValor (AParametros: array of Double) : Double; var i : Integer; begin result := 0; Case FOperacion of opSuma : for i:=Low(AParametros) to High (AParametros) do Inc(result, AParametros[i]); opResta : ... opProducto : ... opDivision : ... end; end; Una vez confeccionada la lista, no hay más que recorrerla e ir calculando valores.
__________________
Guía de Estilo |
|
|
|