Programación General > Delphi

 Yo Otravez Con Una Pregunta Sobre Tmemo

(1/1)

althenna:
bueno tengo un tmemo donde quiero revisar las operaciones matematicas estan correctas o no... con un case pude hacer que  en caso de que existieran ciertos errores saliera un mensaje

por ejemplo

te falta un parentesis o dos operaciones (/*-+) seguidas no es permitido


-------------


entre otros pero mi problema es que no se como ponerle el siguiente problema es decir no puedo hacer que el programa lo reconozca

ejemplo

(98+1)/(3.4.4-7)

aqui el error esta en 3.4.4 no puede existir un numero asi en una operacion ... ayuda por favor y gracias

BlackTigerX:
tu lo que quieres es un parser completo... esta un tanto dificil decirte "se hace asi"... se requiere algo de codigo, y algo complicado tambien... mejor echa un vistazo aqui:
http://www.efg2.com/Lab/Library/Delphi/Mat...ons/Parsers.htm

GatoSoft:
Hola, aqui esta un ejemplo, es mas o menos parecido a la solucion anterior que te di con los listbox.
Pero BlackTigerX tiene razón, Si lo que estas hacienod es un evaluador de expresiones, te va a tocar mucho trabajo, pero si lo que quieres es un corrector sintactico, no es tan complicado, aunque no deja de ocupar bastante de tu tiempo y lineas de codigo.


--- Código: Text --- Procedure Verificar_Numeros(pExpresion:String);var i:Integer;    vestoy_leyendo_numero:Boolean;    vError_con_decimal:Boolean;    vCaracter:Char;    vNumero_str:String;Begin   vError_con_decimal:=false;   vestoy_leyendo_numero:=false;   for i:=1 to length(pExpresion) do     begin     vCaracter:=pExpresion[i];     case vCaracter of     '0'..'9','.':begin                  vestoy_leyendo_numero:=True;                  if vCaracter='.' then                     if POS('.',vNumero_str)>0 then                        vError_con_decimal:=True;                  vNumero_str:=vNumero_str+vCaracter;                  end;     else         begin           if vestoy_leyendo_numero then           begin             form1.Memo1.Lines.Add('Numero: '+vNumero_str);             //Haces lo que nececites hacer con el numero, otras validaciones, por ejemplo             if vError_con_decimal then                begin                form1.Memo1.Lines.Add('Hay mas de un punto decimal en el numero: '+vNumero_str);                vError_con_decimal:=False;                end;             vestoy_leyendo_numero:=false;             vNumero_str:='';           end;         end;     end; //Case     end;//for             if vestoy_leyendo_numero then           begin             form1.Memo1.Lines.Add('Numero: '+vNumero_str);             //Haces lo que nececites hacer con el numero, otras validaciones, por ejemplo             if vError_con_decimal then                begin                form1.Memo1.Lines.Add('Hay mas de un punto decimal en el numero: '+vNumero_str);                vError_con_decimal:=False;                end;             vestoy_leyendo_numero:=false;             vNumero_str:='';           end; end; procedure TForm1.Button1Click(Sender: TObject);beginverificar_Parentesis(edit1.text);Verificar_signos(edit1.text);Verificar_Numeros(edit1.text);end;  

Navegación

[0] Índice de Mensajes

Ir a la versión completa