Ver Mensaje Individual
  #3  
Antiguo 05-07-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Reputación: 22
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