Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-07-2003
Magneto Magneto is offline
Miembro
 
Registrado: jun 2003
Posts: 13
Poder: 0
Magneto Va por buen camino
Question ¿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.....
Responder Con Cita
  #2  
Antiguo 05-07-2003
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 05-07-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 21
andres1569 Va por buen camino
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;
De esta forma al analizar la cadena, vas creas objetos del tipo TNodoOperacion, en el Create les pasas el tipo de Operacion que es cada uno. Para esa lista te puedes valer de un TList, que te permite inserciones, puesto que al analizar la cadena no puedes saber de antemano si las operaciones que vas encontrando se analizarán en el mismo orden.

Una vez confeccionada la lista, no hay más que recorrerla e ir calculando valores.
__________________
Guía de Estilo
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 09:22:04.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi