Quien recuerda la calculadora TI (SR-51-II)? - AlfredoSC - 20-02-2021
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]
Espero que haya entusiastas que les llame la atención este proyecto....Saludos.
RE: Quien recuerda la calculadora TI (SR-51-II)? - Shell - 20-02-2021
Buen trabajo AlfredoSC.
¿ Y el proyecto donde se encuentra ?.
Saludos
RE: Quien recuerda la calculadora TI (SR-51-II)? - AlfredoSC - 20-02-2021
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....
RE: Quien recuerda la calculadora TI (SR-51-II)? - jguardon - 21-02-2021
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
RE: Quien recuerda la calculadora TI (SR-51-II)? - AlfredoSC - 21-02-2021
Gracias por la aclaración. Como puedo subir todo el proyecto a este Foro??...saludos...
RE: Quien recuerda la calculadora TI (SR-51-II)? - jguardon - 22-02-2021
(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
RE: Quien recuerda la calculadora TI (SR-51-II)? - seta43 - 22-02-2021
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.
RE: Quien recuerda la calculadora TI (SR-51-II)? - AlfredoSC - 25-02-2021
(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:
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:
RE: Quien recuerda la calculadora TI (SR-51-II)? - seta43 - 25-02-2021
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
RE: Quien recuerda la calculadora TI (SR-51-II)? - AlfredoSC - 25-02-2021
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....
|