Calculadora De Expresiones
Este es un ejemplo de como realizar una calculadora de expresiones. He usado un script en gambas. Con gambas también podemos hacer script para ejecutarlo en la terminal.
Podeis ver más información en la siguiente pagina: Scripting_con_Gambas
Esta es una captura del programa funcionando:
Este es el enlace de descarga del código fuente: calculadora-0.0.1.tar.gz
El programa es muy simple:
Tiene un archivo tipo ".gbs" (el script):
#!/usr/bin/env gbs2
DIM a,b,c,x,y AS float
a=<a>
b=<b>
c=<c>
x=<x>
y=<y>
PRINT <formula>
que es copiado al disco duro y modificado por las siguientes funciones:
' Gambas module file
PUBLIC FUNCTION ecuacion(expresion AS String, OPTIONAL a AS String, OPTIONAL b AS String, OPTIONAL c AS String, OPTIONAL x AS String, OPTIONAL y AS String) AS String
DIM cadena AS String
DIM comando AS String
DIM valor AS String
TRY KILL User.home & "/programa.gbs"
COPY "programa.gbs" TO User.home & "/programa.gbs"
cadena = File.Load(User.home & "/programa.gbs")
IF a <> NULL THEN
cadena = Replace(cadena, "<a>", var.ConvierteComaaPto(a))
ELSE
cadena = Replace(cadena, "<a>", "0")
ENDIF
IF b <> NULL THEN
cadena = Replace(cadena, "<b>", var.ConvierteComaaPto(b))
ELSE
cadena = Replace(cadena, "<b>", "0")
ENDIF
IF c <> NULL THEN
cadena = Replace(cadena, "<c>", var.ConvierteComaaPto(c))
ELSE
cadena = Replace(cadena, "<c>", "0")
ENDIF
IF x <> NULL THEN
cadena = Replace(cadena, "<x>", var.ConvierteComaaPto(x))
ELSE
cadena = Replace(cadena, "<x>", "0")
ENDIF
IF y <> NULL THEN
cadena = Replace(cadena, "<y>", var.ConvierteComaaPto(y))
ELSE
cadena = Replace(cadena, "<y>", "0")
ENDIF
cadena = Replace(cadena, "<formula>", expresion)
File.Save(User.home & "/programa.gbs", cadena)
WAIT 0.1
EXEC ["chmod", "777", User.home & "/programa.gbs"] WAIT
EXEC [User.home & "/./programa.gbs"] TO valor
IF valor <> "" THEN
RETURN Replace(valor, "\n", "")
ENDIF
Message.Info("Posible error en en la expresión, o al realizar la operación")
RETURN 0
END
PUBLIC FUNCTION ConvierteComaaPto(cadena AS String) AS String
RETURN Replace(cadena, ",", ".")
END
En el formulario principal:
' Gambas class file
PUBLIC SUB _new()
END
PUBLIC SUB Form_Open()
ME.Center
END
PUBLIC SUB ToolButtonCalcular_Click()
DIM lista AS String
TextBoxResultado.text = var.ecuacion(TextBoxExpresion.text, ValueBoxA.value, ValueBoxB.Value, ValueBoxC.value, ValueBoxX.value, valueboxy.value)
lista = Str$(ListViewExpresiones.Count + 1)
ListViewExpresiones.Add(lista, TextBoxExpresion.text & " = " & TextBoxResultado.text)
END
Nota:
Gambas tiene un componente gb.eval, que es usado expresamente para evaluar expresiones. Podéis ver el ejemplo que trae de Calculadora, para verlo como se usa.