Páginas (2): 1 2   
AlfredoSC   20-02-2021, 03:34
#1
Hola Amigos:

Cuando era estudiante, allá por 1978 mis padres me compraron la calculadora Texas Instruments SR-51-II, la cual aún conservo, aunque tuve que ponerle un paquete de baterías adaptado. Bueno, ante el encierro de la pandemia, y salir de la monotonía me propuse hacer el proyecto de esta calculadora en Gambas3. Confieso que al programar cada función del teclado reconozco que para la época, los circuitos integrados de este calculador, debieron ser bastante desarrollados para su época. Aquí pongo el código resultante (que aún está inconcluso, pero funcional en un 95% diría yo) y una imagen. El manual se puede descargar de la web, por si alguien gusta consultarlo y seguir con la programación para mejorarla. 
 
Código:
 
[code]' Gambas class file

Public cuenta As Integer            ' Lleva la cuenta de digitos tecleados
Public acum As Float              ' valor del display completo
Public xx As Float            ' calcular potencias y raices
Public yy As Float
Public mem As Float
Public mem1 As Float
Public mem2 As Float
Public mem3 As Float ' Memorias 1,2 y 3
Public tempo1 As Float
Public tempo2 As Float
Public tempo3 As Float
Public tempo4 As Float    ' Temporales para c\E1lculos
Public fmemw As Boolean
Public fmemr As Boolean
Public fmems As Boolean
Public fmemp As Boolean
Public fmeme As Boolean ' Funciones de memoria
Public deg As Boolean
Public rad As Boolean
Public grad As Boolean    ' flags indican funciones aplicadas
Public suma As Boolean
Public resta As Boolean
Public divide As Boolean
Public multiplica As Boolean
Public raiz As Boolean
Public potencia As Boolean
Public sto As Boolean
Public rcl As Boolean
Public sum As Boolean
Public rest As Boolean
Public prod As Boolean
Public divi As Boolean
Public exc As Boolean
Public punto As Boolean
Public segunda As Boolean
Public inv As Boolean
Public fixes As Boolean
Public porciento As Boolean
Public deltaporc As Boolean
Public dato As New Float[]
Public numdato As Integer
Public mean As Float
Public varianza As Float
Public sdev As Float
Public decifix As String

Public Sub cmdInvX_Click()

If segunda = False Then
    acum = Val(lblDisplay.Text)
    If acum = 0 Then
        lblDisplay.Text = "Error"
    Else
        lblDisplay.Text = 1 / acum
    Endif
    acum = 0

Endif

If segunda = True Then
    lblDisplay.Text = varianza
Endif

segunda = False
cmd2nd.Background = &H808080

End

Public Sub cmdRaizCuad_Click()
Dim modulo As Float
Dim ii As Integer

If segunda = False Then
    acum = Val(lblDisplay.Text)
    If acum >= 0 Then
        lblDisplay.Text = Sqr(acum)
        acum = 0
        cuenta = 0
    Else
        lblDisplay.Text = "Error"
    Endif
Endif

If segunda = True Then          ' Calculo de la desviaci\F3n Est\E1ndar
' La Desviaci\F3n Estandar (S. DEV) se calcula con la formula:
' SD = SQR((Sumatoria de (abs(x - promedio) ^ 2)) / numdatos)
' Calculamos la sumatoria. (El promedio MEAN ya lo tenemos)
    For ii = 0 To numdato - 1
    modulo = modulo + (Abs(dato[ii] - mean)) ^ 2
    Next
    
    If numdato > 0 Then
        varianza = modulo / numdato
        sdev = Sqr(modulo / numdato)
        lblDisplay.Text = sdev
    Endif

Endif

segunda = False
cmd2nd.Background = &H808080

End

Public Sub cmdSigma_Click()
dato[numdato] = Val(lblDisplay.Text)
mem1 = mem1 + dato[numdato]

If segunda = False Then
  numdato = numdato + 1
  lblDisplay.Text = numdato
  cuenta = 0
Endif

If segunda = True Then
'numdato = numdato - 1
Endif

End

Public Sub Form_Open()

fmemw = False
fmemr = False
fmems = False
fmemp = False
fmeme = False
deg = True
rad = False
grad = False
suma = False
resta = False
divide = False
multiplica = False
raiz = False
potencia = False
sto = False
rcl = False
sum = False
rest = False
prod = False
divi = False
deltaporc = False
porciento = False
exc = False
punto = False
segunda = False
inv = False
fixes = False
porciento = False

mem1 = 0
mem2 = 0
mem3 = 0
lblDisplay.Text = "0"
lblgrados.Caption = "DEG"
'Pi 3.141592654
dato = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
numdato = 0

inv = False
cmdINV.Background = &H808080
segunda = False
cmd2nd.Background = &H808080

Me.x = 1200
Me.y = 300

cmdProd.Background = Color.Orange
End

Public Sub cmd2nd_Click()
cmd2nd.Background = Color.Red
segunda = True
End Sub

Public Sub cmdAbreParent_Click()

If segunda = False Then
    tempo1 = Val(lblDisplay.Text)
Endif



If segunda = True Then

Endif


End

Public Sub cmdCE_Click()
cuenta = 0
lblDisplay.Text = "0"
End

Public Sub cmdCierraParent_Click()
If segunda = False Then
    cmdIgual_Click
    tempo1 = acum
    

Endif


If segunda = True Then
lblDisplay.Text = Pi

Endif

segunda = False
cmd2nd.Background = &H808080
End

Public Sub cmdCoseno_Click()
Dim valor As Float

If segunda = False Then
    If deg = True Then
        valor = Val(lblDisplay.Text) * Pi / 180
        lblDisplay.Text = Cos(valor)
    Endif
    
    If rad = True Then
        valor = Val(lblDisplay.Text)
        lblDisplay.Text = Cos(valor)
    Endif
    
    If grad = True Then
        valor = Val(lblDisplay.Text) * Pi / 200
        lblDisplay.Text = Cos(valor)
    Endif

Endif

If segunda = True Then
    If deg = True Then
        valor = Val(lblDisplay.Text) * Pi / 180
        lblDisplay.Text = (Exp(valor) + Exp(-valor)) / 2
    Endif
    
    If rad = True Then
        valor = Val(lblDisplay.Text)
        lblDisplay.Text = (Exp(valor) + Exp(-valor)) / 2
    Endif
    
    If grad = True Then
        valor = Val(lblDisplay.Text) * Pi / 200
        lblDisplay.Text = (Exp(valor) + Exp(-valor)) / 2
    Endif

Endif

segunda = False
cmd2nd.Background = &H808080


End

Public Sub cmdDiv_Click()
If segunda = False Then
  punto = False
  acum = Val(lblDisplay.Text)
  divide = True
  cuenta = 0
Endif

If segunda = True Then
Dim valor As Integer
valor = Int(Val(lblDisplay.Text))
'lblDisplay.Text = fact(valor)

segunda = False
Endif
End

Public Sub cmdex_Click()
Dim valor As Float

If segunda = False And inv = False Then
    valor = Exp(Val(lblDisplay.Text))
    lblDisplay.Text = valor
Endif

If segunda = False And inv = True Then
    valor = Exp(Val(lblDisplay.Text))
    lblDisplay.Text = valor
Endif


If segunda = True And inv = False Then
    valor = 10 ^ Val(lblDisplay.Text)
    lblDisplay.Text = valor
Endif

If segunda = True And inv = True Then
    valor = 10 ^ Val(lblDisplay.Text)
    lblDisplay.Text = valor
Endif

inv = False
cmdINV.Background = &H808080
segunda = False
cmd2nd.Background = &H808080

End

Public Sub cmdINV_Click()
cmdINV.Background = Color.Red
inv = True
End

Public Sub cmdLnx_Click()
Dim valor As Float

If segunda = False Then
    valor = Val(lblDisplay.Text)
    If valor = 0 Then
        lblDisplay.Text = "Error"
    Else
        lblDisplay.Text = Log(valor)
    Endif
Endif


If segunda = True Then
    valor = Val(lblDisplay.Text)
    If valor = 0 Then
        lblDisplay.Text = "Error"
    Else
        lblDisplay.Text = Log(valor) / Log(10)
    Endif
Endif

inv = False
cmdINV.Background = &H808080
segunda = False
cmd2nd.Background = &H808080

End

Public Sub cmdMasMenos_Click()

If segunda = False Then
  lblDisplay.Text = Val(lblDisplay.Text) * (-1)
Endif

If segunda = True Then
  rad = True
  deg = False
  grad = False
  lblgrados.Caption = "RAD"
  segunda = False
Endif

cmd2nd.Background = &H808080

End

Public Sub cmdProd_Click()
If segunda = False Then
  punto = False
  acum = Val(lblDisplay.Text)
  multiplica = True
  cuenta = 0
Endif

If segunda = True Then
Dim valor As Integer
valor = Int(Val(lblDisplay.Text))
'lblDisplay.Text = fact(valor)

segunda = False
Endif
End

Public Sub cmdRaizxy_Click()
If segunda = False Then     ' Se introduce el n\FAmero, la tecla RAIZ y luego el radical
    acum = Val(lblDisplay.Text)
    raiz = True
    cuenta = 0
Endif


If segunda = True Then
    Dim valor As Float
    'Dim digi As Integer
    Dim factorial As Long
    Dim i As Integer
    factorial = 1
    
    valor = Int(Val(lblDisplay.Text))
    For i = 1 To valor
        factorial = factorial * i
    Next

    lblDisplay.Text = factorial
    segunda = False
Endif
cmd2nd.Background = &H808080

End

Public Sub cmdSUM_Click()
If segunda = False Then
    fmems = True
    acum = Val(lblDisplay.Text)
Endif

If segunda = True Then          ' PROD
    fmemp = True
    acum = Val(lblDisplay.Text)
Endif

End

Public Sub cmdTangente_Click()
Dim valor As Float

If segunda = False Then
    If deg = True Then
        valor = Val(lblDisplay.Text) * Pi / 180
        lblDisplay.Text = Tan(valor)
    Endif
    
    If rad = True Then
        valor = Val(lblDisplay.Text)
        lblDisplay.Text = Tan(valor)
    Endif
    
    If grad = True Then
        valor = Val(lblDisplay.Text) * Pi / 100
        lblDisplay.Text = Tan(valor)
    Endif

Endif

If segunda = True Then
    If deg = True Then
        valor = Val(lblDisplay.Text) * Pi / 180
        lblDisplay.Text = (Exp(valor) - Exp(-valor)) / (Exp(valor) + Exp(-valor))
    Endif
    
    If rad = True Then
        valor = Val(lblDisplay.Text)
        lblDisplay.Text = (Exp(valor) - Exp(-valor)) / (Exp(valor) + Exp(-valor))
    Endif
    
    If grad = True Then
        valor = Val(lblDisplay.Text) * Pi / 100
        lblDisplay.Text = (Exp(valor) - Exp(-valor)) / (Exp(valor) + Exp(-valor))
    Endif

Endif

segunda = False
cmd2nd.Background = &H808080

End

Public Sub cmdX2_Click()

If segunda = False Then
    lblDisplay.Text = Val(lblDisplay.Text) ^ 2

Endif


If segunda = True Then              ' Calcula el promedio de datos MEAN
Dim cantidad, ii As Integer

    cantidad = numdato - 1
    mean = 0
    For ii = 0 To cantidad
        mean = mean + dato[ii]
    Next
    
    If numdato > 0 Then
        mean = mean / numdato
        lblDisplay.Text = mean
    Else
        lblDisplay.Text = "Error"
    Endif
    
Endif


inv = False
cmdINV.Background = &H808080
segunda = False
cmd2nd.Background = &H808080

End

Public Sub cmdYaX_Click()

If segunda = False Then         ' Se prepara para calcular y ^ x
    potencia = True
    yy = Val(lblDisplay.Text)
    cuenta = 0
    acum = 0
Endif


If segunda = True Then          ' Calculo de CORR (Correlaci\F3n)


Endif

segunda = False
cmd2nd.Background = &H808080

End

Public Sub cmd0_Click()
If segunda = False And inv = False Then
    If fmemw = False And fmems = False Then
        If cuenta = 0 Then
            lblDisplay.Text = ""
            lblDisplay.Text = "0"
        Else
            lblDisplay.Text = lblDisplay.Text & "0"
        Endif
        cuenta = cuenta + 1
    Endif
        
        If potencia = True And fmems = False Then
            If cuenta = 0 Then
                acum = Val(lblDisplay.Text)
                xx = acum
            Endif
        Endif

Endif

If segunda = True Then
    acum = Val(lblDisplay.Text)
    tempo1 = acum - Int(acum)
    tempo2 = Int(acum) + (tempo1 * 100 / 60)
    lblDisplay.Text = tempo2
    tempo1 = 0
    tempo2 = 0
    acum = 0
Endif

segunda = False
cmd2nd.Background = &H808080

End

Public Sub cmd1_Click()
'Esta tecla pone en display un 1
'Es Mem1 para STO
'Es Mem1 para RCL
'Es Mem1 para EXC con 2nd
'Es Mem1 para SUM
'Es Mem1 para RESTA con INV
'Es Mem1 para PROD con 2nd
'Es Mem1 para DIV con 2nd e INV
'Convierte de \B0F a \B0C con 2nd
'Convierte de \B0C a \B0F con 2nd e INV

If segunda = False And inv = False Then     ' Poner 1 en display
    If fmemw = False And fmems = False And fmems = False Then
        If cuenta = 0 Then
            lblDisplay.Text = "1"
        Else
            lblDisplay.Text = lblDisplay.Text & "1"
        Endif
    Endif
       
        cuenta = cuenta + 1
        
    If fmemw = True Then                        ' STO a Memoria 1
        mem1 = Val(lblDisplay.Text)
        fmemw = False
        cuenta = 0
    Endif
    
    If fmemr = True Then                        ' RCL de Memoria 1
        lblDisplay.Text = mem1
        fmemr = False
        cuenta = 0
    Endif
    
    If fmems = True Then                        ' SUM a Memoria1
        mem1 = mem1 + acum
        fmems = False
        cuenta = 0
    Endif
    
  
    If potencia = True Then                     ' x exp(y)
        acum = Val(lblDisplay.Text)
        xx = acum
    Endif

Endif

If segunda = True And inv = False Then       ' Conversion \B0F a \B0C o PROD a Memoria1
    If fmemp = False And fmeme = False Then
        acum = Val(lblDisplay.Text)
        lblDisplay.Text = (acum - 32) * (5 / 9)
        acum = 0
        cuenta = 0
    Endif
    
    If fmemp = True And fmeme = False Then  ' PROD acum con Memoria 1
        mem1 = mem1 * acum
        acum = 0
    Endif

    If fmeme = True Then                    ' Intercambia acum con Memoria 1
        tempo1 = mem1
        mem1 = Val(lblDisplay.Text)
        lblDisplay.Text = tempo1
        tempo1 = 0
        acum = 0
    Endif

    If fixes = True Then
        decifix = "0.0"
    
    Endif

Endif

If segunda = False And inv = True Then      ' RESTA (INV SUM) a Memoria1



Endif

If segunda = True And inv = True Then       ' Conversion de \B0C a \B0F o DIV (INV PROD) a Memoria1
    If fmemp = False Then
        acum = Val(lblDisplay.Text)
        lblDisplay.Text = (9 * acum / 5) + 32
        acum = 0
        cuenta = 0
    Endif
    
    If fmemp = True Then
        acum = Val(lblDisplay.Text)
        mem1 = acum / mem1
        acum = 0
    Endif
  

Endif

inv = False
cmdINV.Background = &H808080
segunda = False
cmd2nd.Background = &H808080

End

Public Sub cmd2_Click()
'Esta tecla pone en display un 2
'Es Mem2 para STO
'Es Mem2 para RCL
'Es Mem2 para EXC con 2nd
'Es Mem2 para SUM
'Es Mem2 para RESTA con INV
'Es Mem2 para PROD con 2nd
'Es Mem2 para DIV con 2nd e INV
'Convierte de DEG a RAD con 2nd
'Convierte de RAD a DEG con 2nd e INV

If segunda = False And inv = False Then
    If fmemw = False Then
        If fmems = False Then
            If cuenta = 0 Then
                lblDisplay.Text = "2"
            Else
                lblDisplay.Text = lblDisplay.Text & "2"
            Endif
            cuenta = cuenta + 1
        Endif
    Endif
    
    If fmemw = True Then
        mem2 = Val(lblDisplay.Text)
        fmemw = False
        cuenta = 0
    Endif
    
    If fmemr = True Then
        lblDisplay.Text = mem2
        fmemr = False
        cuenta = 0
    Endif
    
    If potencia = True Then
        acum = Val(lblDisplay.Text)
        xx = acum
        cuenta = 0
    Endif
    
    If fmems = True Then                ' Sumar una cantidad a la MEM 2
        mem2 = mem2 + acum
        fmems = False
        cuenta = 0
    Endif

Endif

If segunda = True And inv = False Then      ' Convierte DEG a RAD
    If fmemp = False And fmeme = False Then
        acum = Val(lblDisplay.Text)
        lblDisplay.Text = acum * Pi / 180
        acum = 0
        cuenta = 0
    Endif

    If fmemp = True And fmeme = False Then
        mem2 = mem2 * acum
        acum = 0
        cuenta = 0
    Endif
    
    If fmeme = True Then
        tempo1 = mem2
        mem2 = Val(lblDisplay.Text)
        lblDisplay.Text = tempo1
        tempo1 = 0
        acum = 0
    Endif

Endif

If segunda = False And inv = True Then      ' RESTA (INV SUM) a Memoria2



Endif

If segunda = True And inv = True Then       '
    If fmemp = False Then
        acum = Val(lblDisplay.Text)
        lblDisplay.Text = acum * 180 / Pi
        acum = 0
        cuenta = 0
    Endif

    If fmemp = True Then                    ' DIV (INV PROD) a Memoria2
        acum = Val(lblDisplay.Text)
        mem2 = acum / mem2
        acum = 0
        cuenta = 0
    Endif


Endif

inv = False
cmdINV.Background = &H808080
segunda = False
cmd2nd.Background = &H808080

End

Public Sub cmd3_Click()
'Esta tecla pone en display un 3
'Es Mem3 para STO
'Es Mem3 para RCL
'Es Mem3 para EXC con 2nd
'Es Mem3 para SUM
'Es Mem3 para RESTA con INV
'Es Mem3 para PROD con 2nd
'Es Mem3 para DIV con 2nd e INV
'Convierte de GRAD a RAD con 2nd
'Convierte de RAD a GRAD con 2nd e INV

If segunda = False And inv = False Then
    If fmemw = False Then
        If fmems = False Then
            If cuenta = 0 Then
                lblDisplay.Text = "3"
            Else
                lblDisplay.Text = lblDisplay.Text & "3"
            Endif
        cuenta = cuenta + 1
        Endif
    Endif
    
    If fmemw = True Then
        mem3 = Val(lblDisplay.Text)
        fmemw = False
        cuenta = 0
    Endif
    
    If fmemr = True Then
        lblDisplay.Text = mem3
        fmemr = False
        cuenta = 0
    Endif
    
    If potencia = True Then
        acum = Val(lblDisplay.Text)
        xx = acum
        cuenta = 0
    Endif
    
    If fmems = True Then        ' Sumar una cantidad a la MEM 3
        mem3 = mem3 + acum
        fmems = False
        cuenta = 0
    Endif

Endif

If segunda = True And inv = False Then      ' Convierte de GRAD a RAD
    If fmemp = False And fmeme = False Then
        acum = Val(lblDisplay.Text)
        lblDisplay.Text = acum * Pi / 200
        acum = 0
        cuenta = 0
    Endif
    
    If fmemp = True And fmeme = False Then
        mem3 = mem3 * acum
        acum = 0
        cuenta = 0
    Endif
    
    If fmeme = True Then
        tempo1 = mem3
        mem3 = Val(lblDisplay.Text)
        lblDisplay.Text = tempo1
        tempo1 = 0
        acum = 0
    Endif
    
Endif

If segunda = False And inv = True Then      ' RESTA (INV SUM) a Memoria3



Endif

If segunda = True And inv = True Then       ' Convierte de RAD a GRAD o DIV (INV PROD) a Memoria1
    If fmemp = False Then
        acum = Val(lblDisplay.Text)
        lblDisplay.Text = acum * 200 / Pi
        acum = 0
        cuenta = 0
    Endif
    
    If fmemp = True Then                    ' DIV entre un numero y Memoria 3
        acum = Val(lblDisplay.Text)
        mem3 = acum / mem3
        acum = 0
        cuenta = 0
    Endif

Endif

inv = False
cmdINV.Background = &H808080
segunda = False
cmd2nd.Background = &H808080

End

Public Sub cmd4_Click()
If segunda = False And inv = False Then
    If cuenta = 0 Then
        lblDisplay.Text = "4"
    Else
        lblDisplay.Text = lblDisplay.Text & "4"
    Endif
    cuenta = cuenta + 1
Endif

If segunda = True And inv = False Then
    acum = Val(lblDisplay.Text)
    lblDisplay.Text = acum * 25.4
    acum = 0
Endif

If segunda = True And inv = True Then
    acum = Val(lblDisplay.Text)
    lblDisplay.Text = acum / 25.4
    acum = 0
Endif



If potencia = True Then
    acum = Val(lblDisplay.Text)
    xx = acum
Endif

inv = False
cmdINV.Background = &H808080
segunda = False
cmd2nd.Background = &H808080
End

Public Sub cmd5_Click()
If segunda = False And inv = False Then
    If cuenta = 0 Then
        lblDisplay.Text = "5"
    Else
        lblDisplay.Text = lblDisplay.Text & "5"
    Endif
    cuenta = cuenta + 1
Endif

If segunda = True And inv = False Then
    acum = Val(lblDisplay.Text)
    lblDisplay.Text = acum * 3.785411784
    acum = 0
Endif

If segunda = True And inv = True Then
    acum = Val(lblDisplay.Text)
    lblDisplay.Text = acum / 3.785411784
    acum = 0
Endif

If potencia = True Then
    acum = Val(lblDisplay.Text)
    xx = acum
Endif

inv = False
cmdINV.Background = &H808080
segunda = False
cmd2nd.Background = &H808080

End

Public Sub cmd6_Click()
If segunda = False And inv = False Then
    If cuenta = 0 Then
        lblDisplay.Text = "6"
    Else
        lblDisplay.Text = lblDisplay.Text & "6"
    Endif
    cuenta = cuenta + 1
Endif

If segunda = True And inv = False Then
    acum = Val(lblDisplay.Text)
    lblDisplay.Text = acum * 0.45359237
    acum = 0
Endif

If segunda = True And inv = True Then
    acum = Val(lblDisplay.Text)
    lblDisplay.Text = acum / 0.45359237
    acum = 0
Endif

inv = False
cmdINV.Background = &H808080
segunda = False
cmd2nd.Background = &H808080

End

Public Sub cmd7_Click()
If cuenta = 0 Then
lblDisplay.Text = "7"
Else
lblDisplay.Text = lblDisplay.Text & "7"
Endif

If potencia = True Then
    acum = Val(lblDisplay.Text)
    xx = acum
Endif

cuenta = cuenta + 1


End

Public Sub cmd8_Click()
If cuenta = 0 Then
lblDisplay.Text = "8"
Else
lblDisplay.Text = lblDisplay.Text & "8"
Endif

If potencia = True Then
    acum = Val(lblDisplay.Text)
    xx = acum
Endif

cuenta = cuenta + 1


End

Public Sub cmd9_Click()
If cuenta = 0 Then
lblDisplay.Text = "9"
Else
lblDisplay.Text = lblDisplay.Text & "9"
Endif

If potencia = True Then
    acum = Val(lblDisplay.Text)
    xx = acum
Endif

cuenta = cuenta + 1


End

Public Sub cmdCLR_Click()
Dim ii As Integer

If segunda = False Then
    lblDisplay.Text = "0"
    cuenta = 0
    acum = 0
    
    punto = False
    suma = False
    resta = False
    multiplica = False
    divide = False
    raiz = False
    segunda = False
    inv = False
    
    cmdINV.Background = &H808080
    cmd2nd.Background = &H808080
Endif

If segunda = True Then

    mean = 0
    numdato = 0
    varianza = 0
    sdev = 0
    mem1 = 0
    cuenta = 0
        
    For ii = 0 To 31
    dato[ii] = 0
    Next
    
    deg = True
    grad = False
    rad = False
    
    lblDisplay.Text = "0"
    lblgrados.Caption = "DEG"
Endif

segunda = False
cmd2nd.Background = &H808080

End

Public Sub cmdIgual_Click()
cuenta = 0
If segunda = False Then
    If suma = True And porciento = False Then
        acum = acum + Val(lblDisplay.Text)
        suma = False
        lblDisplay.Text = acum
    Endif
    
    If suma = True And porciento = True Then
      acum = Val(lblDisplay.text)
      acum = xx + acum
      lblDisplay.Text = acum
      acum = 0
      xx = 0
      yy = 0
      porciento = False
    Endif
        
    If resta = True Then
        acum = acum - Val(lblDisplay.Text)
        resta = False
        lblDisplay.Text = acum
    Endif
    
    If potencia = True Then
        acum = yy ^ Val(lblDisplay.Text)
        lblDisplay.Text = acum
    Endif
    
    If divide = True Then
        If Val(lblDisplay.Text) <> 0 Then
            acum = acum / Val(lblDisplay.Text)
            lblDisplay.Text = acum
            divide = False
        Else
            lblDisplay.Text = "Error"
        Endif
    Endif
    
    If multiplica = True Then
        acum = acum * Val(lblDisplay.Text)
        lblDisplay.Text = acum
        multiplica = False
    Endif
    
    If raiz = True Then
        tempo1 = Val(lblDisplay.Text)
        acum = acum ^ (1 / tempo1)
        lblDisplay.Text = acum
        tempo1 = 0
        acum = 0
    Endif
    
    If porciento = True And suma = False And resta = False Then
      If suma = False
        yy = Val(lblDisplay.Text)
        acum = (yy * 100 / xx) - 100
        lblDisplay.Text = acum
        acum = 0
        xx = 0
        yy = 0
        porciento = False
      Endif

      If suma = True And porciento = True Then
        yy = Val(lblDisplay.Text)
        acum = acum + (acum * Val(lblDisplay.Text))
        lblDisplay.Text = acum
        acum = 0
        xx = 0
        yy = 0
      Endif
      
    Endif
    
    punto = False
Endif

If segunda = True Then
grad = True
rad = False
deg = False
lblgrados.Caption = "GRAD"
segunda = False
Endif

segunda = False
cmd2nd.Background = &H808080
potencia = False
cmd2nd.Background = &H808080

End

Public Sub cmdMas_Click()
If segunda = False Then
    punto = False
    acum = Val(lblDisplay.Text)
    xx = acum
    suma = True
    cuenta = 0
Endif

If segunda = True Then
Dim valor As Integer
    valor = Int(Val(lblDisplay.Text))
Endif

inv = False
cmdINV.Background = &H808080
segunda = False
cmd2nd.Background = &H808080

End Sub

Public Sub cmdMenos_Click()
punto = False
acum = Val(lblDisplay.Text)
resta = True
cuenta = 0

End

Public Sub cmdPunto_Click()
If segunda = False And punto = False Then
    If cuenta = 0 Then
        lblDisplay.Text = "0."
        punto = True
    Else
        If punto = False Then
            lblDisplay.Text = lblDisplay.Text & "."
            punto = True
        Endif
    Endif
    cuenta = cuenta + 1
Endif

If segunda = True Then
    lblgrados.Caption = "DEG"
    deg = True
    grad = False
    rad = False
Endif

segunda = False
cmd2nd.Background = &H808080

End

Public Sub cmdRCL_Click()
If segunda = False And inv = False Then     ' RCL
fmemr = True
Endif

If segunda = True And inv = False Then      ' EXC Intercambia Display con Memorias
fmeme = True
Endif

If segunda = False And inv = True Then     ' RCL
fmemr = True
Endif

If segunda = True And inv = True Then       ' EXC Intercambia Display con Memorias
fmeme = True
Endif


End


Public Sub cmdPorciento_Click()
If segunda = False And suma = False Then
  xx = Val(lblDisplay.Text)
  xx = xx * 0.01
  lblDisplay.Text = xx
  porciento = True
Endif

If segunda = False And suma = True Then
  yy = Val(lblDisplay.text)
  yy = xx * yy * 0.01
  lblDisplay.Text = yy
  porciento = True
Endif
  
If segunda = True Then
  deltaporc = True
  xx = Val(lblDisplay.Text)
  cuenta = 0
Endif

punto = False
segunda = False
cmd2nd.Background = &H808080

End


Public Sub cmdSeno_Click()
Dim valor As Float

If segunda = False And inv = False Then
    If deg = True Then
        valor = Val(lblDisplay.Text) * Pi / 180
        lblDisplay.Text = Sin(valor)
    Endif
    
    If rad = True Then
        valor = Val(lblDisplay.Text)
        lblDisplay.Text = Sin(valor)
    Endif
    
    If grad = True Then
        valor = Val(lblDisplay.Text) * Pi / 200
        lblDisplay.Text = Sin(valor)
    Endif
Endif

If segunda = True And inv = False Then
    If deg = True Then
        valor = Val(lblDisplay.Text) * Pi / 180
        lblDisplay.Text = (Exp(valor) - Exp(-valor)) / 2
    Endif
    
    If rad = True Then
        valor = Val(lblDisplay.Text)
        lblDisplay.Text = (Exp(valor) - Exp(-valor)) / 2
    Endif
    
    If grad = True Then
        valor = Val(lblDisplay.Text) * Pi / 200
        lblDisplay.Text = (Exp(valor) - Exp(-valor)) / 2
    Endif
Endif

If segunda = False And inv = True Then      ' Angulo con INV sin x
    If deg = True Then
        valor = Val(lblDisplay.Text)
        acum = Atn(valor / Sqr(-valor * valor + 1)) * 180 / Pi
        lblDisplay.Text = acum
    Endif
    
    If rad = True Then
        valor = Val(lblDisplay.Text)
        tempo1 = Sqr(-valor * valor + 1)
        If tempo1 > 0 Then
            lblDisplay.Text = Atn(valor / Sqr(-valor * valor + 1))
            valor = 0
            tempo1 = 0
        Else
            lblDisplay.Text = "Error"
            valor = 0
            tempo1 = 0
        Endif
    Endif
    
    If grad = True Then
        valor = Val(lblDisplay.Text)
        lblDisplay.Text = Atn(valor / Sqr(-valor * valor + 1)) * 200 / Pi
    Endif
Endif

If segunda = True And inv = True Then      ' Inversa sinh x
    If deg = True Then
        valor = Val(lblDisplay.Text)
        lblDisplay.Text = Log(valor * Sqr(valor * valor + 1)) * 180 / Pi
    Endif
    
    If rad = True Then
        valor = Val(lblDisplay.Text)
        lblDisplay.Text = Log(valor * Sqr(valor * valor + 1))
    Endif
    
    If grad = True Then
        valor = Val(lblDisplay.Text)
        lblDisplay.Text = Log(valor * Sqr(valor * valor + 1)) * 200 / Pi
    Endif
Endif

inv = False
cmdINV.Background = &H808080
segunda = False
cmd2nd.Background = &H808080

End

Public Sub cmdSTO_Click()
If segunda = False Then
    'mem = Val(lblDisplay.Text)
    fmemw = True
Endif

If segunda = True Then
    fixes = True
Endif

End

Public Sub cmdSalir_Click()
Quit
End
 
[/code]

[Imagen: BXmpCA0.png]

Espero que haya entusiastas que les llame la atención este proyecto....Saludos.

Es mejor saber un poco de todo, que todo de muy poco. Lo primero, garantiza la supervivencia humana.
Shell   20-02-2021, 14:59
#2
Buen trabajo AlfredoSC.

¿ Y el proyecto donde se encuentra ?. Wink

Saludos

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
AlfredoSC   20-02-2021, 22:03
#3
Hola Shell....Tienes razón al hacerme esa pregunta capciosa....No tengo un proyecto escrito y elaborado, con toda la formalidad de algo que se presuma de "Proyecto"...Abrí Gambas3, descargué el  manual del usuario de la SR-51-II y en base a éste, fui creando objetos (teclas y displays), y proseguí con la creación del código por función de tecla....Así que el "proyecto" en si, es el propio código que he pegado y la imagen es para que alguien interesado haga su propio diseño, que no debería cambiar mucho, si se quiere ser lo mas fiel posible a la calculadora física....

Saludos....

Es mejor saber un poco de todo, que todo de muy poco. Lo primero, garantiza la supervivencia humana.
jguardon   21-02-2021, 17:10
#4
Creo que shell se refiere al proyecto de gambas, específicamente. Es decir, al desarrollo en tu IDE que recibe el nombre de "proyecto" como cualquier otro programa, englobando los formularios, módulos y recursos gráficos o de otro tipo que conforman el programa. Eso es un proyecto de gambas y puede ser exportado en un formato comprimido desde el mismo IDE para compartirlo y que otros desarrolladores lo puedan probar, ampliar, mejorar desde su propio IDE.

Me imagino que cuando shell te pregunta por el proyecto, lo que está intentando decir es si hay alguna manera de que lo compartas para poder "meterle mano" ya que no basta con el código que has pegado en tu post, sino que para poder reproducir la parte gráfica, hacen falta todos los ficheros que conforman el conjunto del proyecto.

Saludos

Por favor, usa el corrector ortográfico antes de pulsar el botón 'Enviar'
AlfredoSC   21-02-2021, 18:18
#5
Gracias por la aclaración. Como puedo subir todo el proyecto a este Foro??...saludos...

Es mejor saber un poco de todo, que todo de muy poco. Lo primero, garantiza la supervivencia humana.
jguardon   22-02-2021, 00:43
#6
(21-02-2021, 18:18)AlfredoSC escribió: Como puedo subir todo el proyecto a este Foro??

Hola

Es muy fácil. Con tu proyecto de gambas abierto, ve al menú Proyecto -> Crear -> Archivo Fuentes

Luego sólo tienes que incluirlo en tu mensaje como adjunto (sólo es posible hacerlo en un nuevo tema, o bien respondiendo en un tema mediante el botón Responder, pero no mediante la respuesta rápida). Entonces verás abajo a la izquierda un botón con el texto "Elegir Archivos" y una vez elegido el fichero, a la derecha hay otro botón para "Agregar archivo". Eso es todo.

​​​​​​​Saludos

Por favor, usa el corrector ortográfico antes de pulsar el botón 'Enviar'
seta43   22-02-2021, 22:36
#7
Parece muy chula, conozco la calculadora.
Yo hago colección de calculadoras, de Texas tengo la TI-30 y TI-1050
Espero que pronto pongas el interfaz.
Saludos. Smile
AlfredoSC   25-02-2021, 05:12
#8
(22-02-2021, 00:43)jguardon escribió:
(21-02-2021, 18:18)AlfredoSC escribió: Como puedo subir todo el proyecto a este Foro??

Hola

Es muy fácil. Con tu proyecto de gambas abierto, ve al menú Proyecto -> Crear -> Archivo Fuentes

Luego sólo tienes que incluirlo en tu mensaje como adjunto (sólo es posible hacerlo en un nuevo tema, o bien respondiendo en un tema mediante el botón Responder, pero no mediante la respuesta rápida). Entonces verás abajo a la izquierda un botón con el texto "Elegir Archivos" y una vez elegido el fichero, a la derecha hay otro botón para "Agregar archivo". Eso es todo.

Saludos

De acuerdo a tus amables indicaciones, aquí subo la carpeta del proyecto: 
.gz
SR-51-II-0.0.5.tar.gz (Tamaño: 43.95 KB Descargas: 4)


Hola a todos:

Como también tengo la TI Programmable 57, que funciona, igual estoy haciendo el IDE en software de Gambas3, aprovechando el camino andado de la SR-51-II. Aquí la gran diferencia será que al invocar la tecla LRN, pueda almacenar todas las instrucciones en algún archivo, que luego lo pueda recuperar cuantas veces quiera para recrear todas las instrucciones almacenadas...al oprimir R/S....aquí pongo la imagen:[Imagen: NIg89UX.png]
Última modificación: 25-02-2021, 05:21 por AlfredoSC.

Es mejor saber un poco de todo, que todo de muy poco. Lo primero, garantiza la supervivencia humana.
seta43   25-02-2021, 12:48
#9
Hola

He estado revisando tu código y he realizado alguna modificación.
No sé en que país estas, yo vivo en España y la separación de los decimales se pone con una coma.
El problema es que si pones la orden Val("0.5") da ERROR . He creado una función ValR() para que no de este error.
Por lo demás he utilizado todo tu código para hacer una versión de la calculadora, espero que te guste, si tienes alguna duda me lo comentas.
Tiene la posibilidad de borde o no borde, botón derecho del ratón.

PROGRAMA FUENTE

[Imagen: sr51ll.png]
AlfredoSC   25-02-2021, 22:37
#10
Hola seta43:

Estoy en México, es por eso que el "punto decimal" es la norma por acá....

Estoy contento de que le hayas dedicado tiempo a este proyecto y ya lo quisiera ver distribuido en la web y funcional al 100%, así que todo esfuerzo por lograrlo es loable.

En este momento estoy usando Linux Mint 19.3 Cinnamon para ver el comportamiento de Gambas3 en este ambiente, y encuentro que NO responde la asignación de Background para cambiar el color en Buttons....

Hay un tema en el Foro antiguo donde participó jguardon en 2010 y finalmente escribió: 

"No, no habría diferencia a menos que el fallo se haya corregido en la rama de desarrollo y no en el paquete precompilado. Si no es un bug, seguramente puede ser un problema con el tema gráfico que estás usando en Gnome3. ¿Has probado con otro tema gráfico?

Por cierto, estoy usando Linux Mint con Cinnamon y tampoco funciona. Empiezo a pensar que realmente se trata de un bug. Si puedes prueba con otro tema y nos cuentas. En caso de que no haya diferencias, puedo reportarlo a Benoit y vuelvo con alguna respuesta."

Pero no aparece la solución a este Bug o es "una característica no documentada", como respondió Shell en aquella época.....

Ya estoy descargando y viendo los avances que mandaste en "PROGRAMA FUENTE" y la imagen....Estoy pendiente...saludos....

Es mejor saber un poco de todo, que todo de muy poco. Lo primero, garantiza la supervivencia humana.
Páginas (2): 1 2   
  
Usuarios navegando en este tema: 7 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.