RE:Calculadora
Publicado por
pepe (1 intervención) el 01/04/2010 17:08:45
hola , pues yo, estaba haciendo una aplicacion y de repente, pense, en mirar algun tipo de cogido que estubiera hecho, y cual fue mi sorpresa que todos los codigos de calculadoras, son rudimentarios, y no efectuan los resultados correctamente
por ejemplo
2+2+3/2+5¡2*3/2
mi sorpresa fue que ningun codigo funcionaba correctamente
asi que, me decidí a escribir uno en gambas, ya que el cliente, de la aplicacion que estoy haciendo, queria que fuese en linux, y solo encontré, este interprete , yo soy programador de c , pero en windows.
bueno, menos rollos
os pongo el codigo, ,(sirva este escrito, para definir, este cogido, como publico,, es decir, que podeis utilizarlos como querais, y modificarlo a vuestro antojo)
quedando claro, lo de arriba, ale
PUBLIC SUB Form_KeyPress()
DIM cachis AS Integer
IF bloc.text <> "1" AND (Key.code > 47 AND Key.code < 58) OR (Key.code = 46 AND InStr(pan.text, ".") = 0) THEN
IF marca.text = "1" THEN pan.text = pan.text & Chr$(Key.code)
IF pan.text = "0" OR marca.text = "" THEN
pan.text = Chr$(Key.code)
marca.text = "1"
signo.text = "0"
ENDIF
IF marca.text = "0" THEN
pan.text = Chr$(Key.code)
marca.text = "1"
signo.text = "0"
ENDIF
ENDIF
IF Key.code = 43 AND signo.text = "0" THEN
pinta()
label1.text = label1.text & label2.text & pan.text
label2.text = "+"
signo.text = "1"
marca.text = "0"
resultado()
IF label1.text <> "" AND label2.text = "" AND pan.text = "" THEN Fin()
ENDIF
IF Key.code = 45 AND signo.text = "0" THEN
label1.text = label1.text & label2.text & pan.text
label2.text = "-"
marca.text = "0"
signo.text = "1"
resultado()
IF label1.text <> "" AND label2.text = "" AND pan.text = "" THEN Fin()
ENDIF
IF Key.code = 47 AND signo.text = "0" THEN
signo.text = "1"
label1.text = label1.text & label2.text & pan.text
label2.text = "/"
marca.text = "0"
resultado()
IF label1.text <> "" AND label2.text = "" AND pan.text = "" THEN Fin()
ENDIF
IF Key.code = 42 AND signo.text = "0" THEN
signo.text = "1"
label1.text = label1.text & label2.text & pan.text
label2.text = "*"
marca.text = "0"
resultado()
IF label1.text <> "" AND label2.text = "" AND pan.text = "" THEN Fin()
ENDIF
IF Key.code = 4118 THEN
signo.text = "0"
'label1.text = label1.text & label2.text & pan.text
'resultado()
marca.text = ""
pan.text = "0"
label1.text = ""
label2.text = ""
bloc.text = "0"
pinta()
ENDIF
IF Key.code = 4119 THEN
pan.text = "0"
marca.text = ""
pinta()
ENDIF
IF Key.code = 4101 THEN
signo.text = "0"
label1.text = label1.text & label2.text & pan.text
resultado()
label1.text = ""
label2.text = ""
pinta()
marca.text = "0"
ENDIF
' borrado caracter a caracter de la pantalla (a gusto del consumidor)
'IF Key.code = 4099 THEN
'IF Len(pan.text) > 0 THEN pan.text = Left(pan.text, Len(pan.text) - 1)
'IF pan.text = "" THEN
'pan.text = "0"
'marca.text = "0"
'pinta()
'ENDIF
'ENDIF
END
PUBLIC SUB resultado()
DIM Context AS NEW Collection
DIM resul AS Variant
DIM cadena AS String
cadena = label1.text
resul = Eval(cadena, context)
resul = Replace(Str(resul), ",", ".")
IF InStr(resul, ".") <> 0 THEN resul = Left(resul, InStr(resul, ".") + 2)
pan.text = Str(resul)
label1.text = Str(resul)
pinta()
CATCH
pan.text = "Error, division por '0'"
label1.text = ""
label2.text = ""
'Message.Info("Error division por o ")
'pan.text = "0"
marca.text = "0"
bloc.text = "1"
END
PUBLIC SUB Fin()
signo.text = "0"
label1.text = label1.text & label2.text & pan.text
resultado()
label1.text = ""
label2.text = ""
pinta()
marca.text = "0"
END
PUBLIC SUB pinta()
mas.Background = &hC0C0C0
menos.Background = &hc0C0C0
por.Background = &hC0C0C0
div.Background = &hC0C0C0
IF label2.text = "+" THEN mas.Background = &hff0000
IF label2.text = "-" THEN menos.Background = &hff0000
IF label2.text = "*" THEN por.Background = &hff0000
IF label2.text = "/" THEN div.Background = &hff0000
END
PUBLIC SUB Form_Open()
END
ni que decir tiene, que teneis que meterlo en un form, y crear en el form, los textbox y labels que indique, cuando lo ejecuteis.
pan= textbox; label1= labwl1 etc...
cuando lo pongais en marcha, os dara los errores del formulario por falta de los dialogos, ir creandolos,, sobre la marcha, y alejop, teneis una calculadora con las funciones basicas.
por cierto, si quereis implementar funciones, solo teneis que adaptaros, a la funcion "eval", evaluador de expresiones
es una funcion, muy chachi, y sobretodo muy util, aunque poca gente, sepa utilizarla, espero que cuando veais funcionar esta calculadora (igual que las de verdad), investigueis sobre la funcion eval (insisto, es muy potente)
ahh, si modificais el codigo, y haceis algo especial, no dudeis en colocarlo aqui.
un saludo, y gracias por leer este tocho de escrito.