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
Ir a la versión completa