Páginas

domingo, 22 de enero de 2012

Calculadora de Expresiones en Gambas: usando script realizados en Gambas


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.