Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

Quien recuerda la calculadora TI (SR-51-II)?
#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:
 
GAMBAS
  1. ' Gambas class file
  2.  
  3. Public cuenta As Integer            ' Lleva la cuenta de digitos tecleados
  4. Public acum As Float              ' valor del display completo
  5. Public xx As Float            ' calcular potencias y raices
  6. Public mem3 As Float ' Memorias 1,2 y 3
  7. Public tempo1 As Float
  8. Public tempo2 As Float
  9. Public tempo3 As Float
  10. Public tempo4 As Float    ' Temporales para c\E1lculos
  11. Public fmeme As Boolean ' Funciones de memoria
  12. Public grad As Boolean    ' flags indican funciones aplicadas
  13. Public multiplica As Boolean
  14. Public potencia As Boolean
  15. Public segunda As Boolean
  16. Public porciento As Boolean
  17. Public deltaporc As Boolean
  18. Public numdato As Integer
  19. Public varianza As Float
  20. Public decifix As String
  21.  
  22. Public Sub cmdInvX_Click()
  23.  
  24. If segunda = False Then
  25.     acum = Val(lblDisplay.Text)
  26.     If acum = 0 Then
  27.         lblDisplay.Text = "Error"
  28.     Else
  29.         lblDisplay.Text = 1 / acum
  30.     Endif
  31.     acum = 0
  32.  
  33.  
  34. If segunda = True Then
  35.     lblDisplay.Text = varianza
  36.  
  37. segunda = False
  38. cmd2nd.Background = &H808080
  39.  
  40.  
  41. Public Sub cmdRaizCuad_Click()
  42. Dim modulo As Float
  43.  
  44. If segunda = False Then
  45.     acum = Val(lblDisplay.Text)
  46.     If acum >= 0 Then
  47.         lblDisplay.Text = Sqr(acum)
  48.         acum = 0
  49.         cuenta = 0
  50.     Else
  51.         lblDisplay.Text = "Error"
  52.     Endif
  53.  
  54. If segunda = True Then          ' Calculo de la desviaci\F3n Est\E1ndar
  55. ' La Desviaci\F3n Estandar (S. DEV) se calcula con la formula:
  56. ' SD = SQR((Sumatoria de (abs(x - promedio) ^ 2)) / numdatos)
  57. ' Calculamos la sumatoria. (El promedio MEAN ya lo tenemos)
  58.     For ii = 0 To numdato - 1
  59.     modulo = modulo + (Abs(dato[ii] - mean)) ^ 2
  60.     Next
  61.     
  62.     If numdato > 0 Then
  63.         varianza = modulo / numdato
  64.         sdev = Sqr(modulo / numdato)
  65.         lblDisplay.Text = sdev
  66.     Endif
  67.  
  68.  
  69. segunda = False
  70. cmd2nd.Background = &H808080
  71.  
  72.  
  73. Public Sub cmdSigma_Click()
  74. dato[numdato] = Val(lblDisplay.Text)
  75. mem1 = mem1 + dato[numdato]
  76.  
  77. If segunda = False Then
  78.   numdato = numdato + 1
  79.   lblDisplay.Text = numdato
  80.   cuenta = 0
  81.  
  82. If segunda = True Then
  83. 'numdato = numdato - 1
  84.  
  85.  
  86. Public Sub Form_Open()
  87.  
  88. fmemw = False
  89. fmemr = False
  90. fmems = False
  91. fmemp = False
  92. fmeme = False
  93. grad = False
  94. suma = False
  95. resta = False
  96. divide = False
  97. multiplica = False
  98. raiz = False
  99. potencia = False
  100. sto = False
  101. rcl = False
  102. sum = False
  103. rest = False
  104. prod = False
  105. divi = False
  106. deltaporc = False
  107. porciento = False
  108. exc = False
  109. punto = False
  110. segunda = False
  111. inv = False
  112. fixes = False
  113. porciento = False
  114.  
  115. mem1 = 0
  116. mem2 = 0
  117. mem3 = 0
  118. lblDisplay.Text = "0"
  119. lblgrados.Caption = "DEG"
  120. 'Pi 3.141592654
  121. 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]
  122. numdato = 0
  123.  
  124. inv = False
  125. cmdINV.Background = &H808080
  126. segunda = False
  127. cmd2nd.Background = &H808080
  128.  
  129. Me.x = 1200
  130. Me.y = 300
  131.  
  132. cmdProd.Background = Color.Orange
  133.  
  134. Public Sub cmd2nd_Click()
  135. cmd2nd.Background = Color.Red
  136. segunda = True
  137.  
  138. Public Sub cmdAbreParent_Click()
  139.  
  140. If segunda = False Then
  141.     tempo1 = Val(lblDisplay.Text)
  142.  
  143.  
  144.  
  145. If segunda = True Then
  146.  
  147.  
  148.  
  149.  
  150. Public Sub cmdCE_Click()
  151. cuenta = 0
  152. lblDisplay.Text = "0"
  153.  
  154. Public Sub cmdCierraParent_Click()
  155. If segunda = False Then
  156.     cmdIgual_Click
  157.     tempo1 = acum
  158.     
  159.  
  160.  
  161.  
  162. If segunda = True Then
  163. lblDisplay.Text = Pi
  164.  
  165.  
  166. segunda = False
  167. cmd2nd.Background = &H808080
  168.  
  169. Public Sub cmdCoseno_Click()
  170. Dim valor As Float
  171.  
  172. If segunda = False Then
  173.     If deg = True Then
  174.         valor = Val(lblDisplay.Text) * Pi / 180
  175.         lblDisplay.Text = Cos(valor)
  176.     Endif
  177.     
  178.     If rad = True Then
  179.         valor = Val(lblDisplay.Text)
  180.         lblDisplay.Text = Cos(valor)
  181.     Endif
  182.     
  183.     If grad = True Then
  184.         valor = Val(lblDisplay.Text) * Pi / 200
  185.         lblDisplay.Text = Cos(valor)
  186.     Endif
  187.  
  188.  
  189. If segunda = True Then
  190.     If deg = True Then
  191.         valor = Val(lblDisplay.Text) * Pi / 180
  192.         lblDisplay.Text = (Exp(valor) + Exp(-valor)) / 2
  193.     Endif
  194.     
  195.     If rad = True Then
  196.         valor = Val(lblDisplay.Text)
  197.         lblDisplay.Text = (Exp(valor) + Exp(-valor)) / 2
  198.     Endif
  199.     
  200.     If grad = True Then
  201.         valor = Val(lblDisplay.Text) * Pi / 200
  202.         lblDisplay.Text = (Exp(valor) + Exp(-valor)) / 2
  203.     Endif
  204.  
  205.  
  206. segunda = False
  207. cmd2nd.Background = &H808080
  208.  
  209.  
  210.  
  211. Public Sub cmdDiv_Click()
  212. If segunda = False Then
  213.   punto = False
  214.   acum = Val(lblDisplay.Text)
  215.   divide = True
  216.   cuenta = 0
  217.  
  218. If segunda = True Then
  219. Dim valor As Integer
  220. valor = Int(Val(lblDisplay.Text))
  221. 'lblDisplay.Text = fact(valor)
  222.  
  223. segunda = False
  224.  
  225. Public Sub cmdex_Click()
  226. Dim valor As Float
  227.  
  228. If segunda = False And inv = False Then
  229.     valor = Exp(Val(lblDisplay.Text))
  230.     lblDisplay.Text = valor
  231.  
  232. If segunda = False And inv = True Then
  233.     valor = Exp(Val(lblDisplay.Text))
  234.     lblDisplay.Text = valor
  235.  
  236.  
  237. If segunda = True And inv = False Then
  238.     valor = 10 ^ Val(lblDisplay.Text)
  239.     lblDisplay.Text = valor
  240.  
  241. If segunda = True And inv = True Then
  242.     valor = 10 ^ Val(lblDisplay.Text)
  243.     lblDisplay.Text = valor
  244.  
  245. inv = False
  246. cmdINV.Background = &H808080
  247. segunda = False
  248. cmd2nd.Background = &H808080
  249.  
  250.  
  251. Public Sub cmdINV_Click()
  252. cmdINV.Background = Color.Red
  253. inv = True
  254.  
  255. Public Sub cmdLnx_Click()
  256. Dim valor As Float
  257.  
  258. If segunda = False Then
  259.     valor = Val(lblDisplay.Text)
  260.     If valor = 0 Then
  261.         lblDisplay.Text = "Error"
  262.     Else
  263.         lblDisplay.Text = Log(valor)
  264.     Endif
  265.  
  266.  
  267. If segunda = True Then
  268.     valor = Val(lblDisplay.Text)
  269.     If valor = 0 Then
  270.         lblDisplay.Text = "Error"
  271.     Else
  272.         lblDisplay.Text = Log(valor) / Log(10)
  273.     Endif
  274.  
  275. inv = False
  276. cmdINV.Background = &H808080
  277. segunda = False
  278. cmd2nd.Background = &H808080
  279.  
  280.  
  281. Public Sub cmdMasMenos_Click()
  282.  
  283. If segunda = False Then
  284.   lblDisplay.Text = Val(lblDisplay.Text) * (-1)
  285.  
  286. If segunda = True Then
  287.   rad = True
  288.   deg = False
  289.   grad = False
  290.   lblgrados.Caption = "RAD"
  291.   segunda = False
  292.  
  293. cmd2nd.Background = &H808080
  294.  
  295.  
  296. Public Sub cmdProd_Click()
  297. If segunda = False Then
  298.   punto = False
  299.   acum = Val(lblDisplay.Text)
  300.   multiplica = True
  301.   cuenta = 0
  302.  
  303. If segunda = True Then
  304. Dim valor As Integer
  305. valor = Int(Val(lblDisplay.Text))
  306. 'lblDisplay.Text = fact(valor)
  307.  
  308. segunda = False
  309.  
  310. Public Sub cmdRaizxy_Click()
  311. If segunda = False Then     ' Se introduce el n\FAmero, la tecla RAIZ y luego el radical
  312.     acum = Val(lblDisplay.Text)
  313.     raiz = True
  314.     cuenta = 0
  315.  
  316.  
  317. If segunda = True Then
  318.     Dim valor As Float
  319.     'Dim digi As Integer
  320.     Dim factorial As Long
  321.     Dim i As Integer
  322.     factorial = 1
  323.     
  324.     valor = Int(Val(lblDisplay.Text))
  325.     For i = 1 To valor
  326.         factorial = factorial * i
  327.     Next
  328.  
  329.     lblDisplay.Text = factorial
  330.     segunda = False
  331. cmd2nd.Background = &H808080
  332.  
  333.  
  334. Public Sub cmdSUM_Click()
  335. If segunda = False Then
  336.     fmems = True
  337.     acum = Val(lblDisplay.Text)
  338.  
  339. If segunda = True Then          ' PROD
  340.     fmemp = True
  341.     acum = Val(lblDisplay.Text)
  342.  
  343.  
  344. Public Sub cmdTangente_Click()
  345. Dim valor As Float
  346.  
  347. If segunda = False Then
  348.     If deg = True Then
  349.         valor = Val(lblDisplay.Text) * Pi / 180
  350.         lblDisplay.Text = Tan(valor)
  351.     Endif
  352.     
  353.     If rad = True Then
  354.         valor = Val(lblDisplay.Text)
  355.         lblDisplay.Text = Tan(valor)
  356.     Endif
  357.     
  358.     If grad = True Then
  359.         valor = Val(lblDisplay.Text) * Pi / 100
  360.         lblDisplay.Text = Tan(valor)
  361.     Endif
  362.  
  363.  
  364. If segunda = True Then
  365.     If deg = True Then
  366.         valor = Val(lblDisplay.Text) * Pi / 180
  367.         lblDisplay.Text = (Exp(valor) - Exp(-valor)) / (Exp(valor) + Exp(-valor))
  368.     Endif
  369.     
  370.     If rad = True Then
  371.         valor = Val(lblDisplay.Text)
  372.         lblDisplay.Text = (Exp(valor) - Exp(-valor)) / (Exp(valor) + Exp(-valor))
  373.     Endif
  374.     
  375.     If grad = True Then
  376.         valor = Val(lblDisplay.Text) * Pi / 100
  377.         lblDisplay.Text = (Exp(valor) - Exp(-valor)) / (Exp(valor) + Exp(-valor))
  378.     Endif
  379.  
  380.  
  381. segunda = False
  382. cmd2nd.Background = &H808080
  383.  
  384.  
  385. Public Sub cmdX2_Click()
  386.  
  387. If segunda = False Then
  388.     lblDisplay.Text = Val(lblDisplay.Text) ^ 2
  389.  
  390.  
  391.  
  392. If segunda = True Then              ' Calcula el promedio de datos MEAN
  393. Dim cantidad, ii As Integer
  394.  
  395.     cantidad = numdato - 1
  396.     mean = 0
  397.     For ii = 0 To cantidad
  398.         mean = mean + dato[ii]
  399.     Next
  400.     
  401.     If numdato > 0 Then
  402.         mean = mean / numdato
  403.         lblDisplay.Text = mean
  404.     Else
  405.         lblDisplay.Text = "Error"
  406.     Endif
  407.     
  408.  
  409.  
  410. inv = False
  411. cmdINV.Background = &H808080
  412. segunda = False
  413. cmd2nd.Background = &H808080
  414.  
  415.  
  416. Public Sub cmdYaX_Click()
  417.  
  418. If segunda = False Then         ' Se prepara para calcular y ^ x
  419.     potencia = True
  420.     yy = Val(lblDisplay.Text)
  421.     cuenta = 0
  422.     acum = 0
  423.  
  424.  
  425. If segunda = True Then          ' Calculo de CORR (Correlaci\F3n)
  426.  
  427.  
  428.  
  429. segunda = False
  430. cmd2nd.Background = &H808080
  431.  
  432.  
  433. Public Sub cmd0_Click()
  434. If segunda = False And inv = False Then
  435.     If fmemw = False And fmems = False Then
  436.         If cuenta = 0 Then
  437.             lblDisplay.Text = ""
  438.             lblDisplay.Text = "0"
  439.         Else
  440.             lblDisplay.Text = lblDisplay.Text & "0"
  441.         Endif
  442.         cuenta = cuenta + 1
  443.     Endif
  444.         
  445.         If potencia = True And fmems = False Then
  446.             If cuenta = 0 Then
  447.                 acum = Val(lblDisplay.Text)
  448.                 xx = acum
  449.             Endif
  450.         Endif
  451.  
  452.  
  453. If segunda = True Then
  454.     acum = Val(lblDisplay.Text)
  455.     tempo1 = acum - Int(acum)
  456.     tempo2 = Int(acum) + (tempo1 * 100 / 60)
  457.     lblDisplay.Text = tempo2
  458.     tempo1 = 0
  459.     tempo2 = 0
  460.     acum = 0
  461.  
  462. segunda = False
  463. cmd2nd.Background = &H808080
  464.  
  465.  
  466. Public Sub cmd1_Click()
  467. 'Esta tecla pone en display un 1
  468. 'Es Mem1 para STO
  469. 'Es Mem1 para RCL
  470. 'Es Mem1 para EXC con 2nd
  471. 'Es Mem1 para SUM
  472. 'Es Mem1 para RESTA con INV
  473. 'Es Mem1 para PROD con 2nd
  474. 'Es Mem1 para DIV con 2nd e INV
  475. 'Convierte de \B0F a \B0C con 2nd
  476. 'Convierte de \B0C a \B0F con 2nd e INV
  477.  
  478. If segunda = False And inv = False Then     ' Poner 1 en display
  479.     If fmemw = False And fmems = False And fmems = False Then
  480.         If cuenta = 0 Then
  481.             lblDisplay.Text = "1"
  482.         Else
  483.             lblDisplay.Text = lblDisplay.Text & "1"
  484.         Endif
  485.     Endif
  486.        
  487.         cuenta = cuenta + 1
  488.         
  489.     If fmemw = True Then                        ' STO a Memoria 1
  490.         mem1 = Val(lblDisplay.Text)
  491.         fmemw = False
  492.         cuenta = 0
  493.     Endif
  494.     
  495.     If fmemr = True Then                        ' RCL de Memoria 1
  496.         lblDisplay.Text = mem1
  497.         fmemr = False
  498.         cuenta = 0
  499.     Endif
  500.     
  501.     If fmems = True Then                        ' SUM a Memoria1
  502.         mem1 = mem1 + acum
  503.         fmems = False
  504.         cuenta = 0
  505.     Endif
  506.     
  507.   
  508.     If potencia = True Then                     ' x exp(y)
  509.         acum = Val(lblDisplay.Text)
  510.         xx = acum
  511.     Endif
  512.  
  513.  
  514. If segunda = True And inv = False Then       ' Conversion \B0F a \B0C o PROD a Memoria1
  515.     If fmemp = False And fmeme = False Then
  516.         acum = Val(lblDisplay.Text)
  517.         lblDisplay.Text = (acum - 32) * (5 / 9)
  518.         acum = 0
  519.         cuenta = 0
  520.     Endif
  521.     
  522.     If fmemp = True And fmeme = False Then  ' PROD acum con Memoria 1
  523.         mem1 = mem1 * acum
  524.         acum = 0
  525.     Endif
  526.  
  527.     If fmeme = True Then                    ' Intercambia acum con Memoria 1
  528.         tempo1 = mem1
  529.         mem1 = Val(lblDisplay.Text)
  530.         lblDisplay.Text = tempo1
  531.         tempo1 = 0
  532.         acum = 0
  533.     Endif
  534.  
  535.     If fixes = True Then
  536.         decifix = "0.0"
  537.     
  538.     Endif
  539.  
  540.  
  541. If segunda = False And inv = True Then      ' RESTA (INV SUM) a Memoria1
  542.  
  543.  
  544.  
  545.  
  546. If segunda = True And inv = True Then       ' Conversion de \B0C a \B0F o DIV (INV PROD) a Memoria1
  547.     If fmemp = False Then
  548.         acum = Val(lblDisplay.Text)
  549.         lblDisplay.Text = (9 * acum / 5) + 32
  550.         acum = 0
  551.         cuenta = 0
  552.     Endif
  553.     
  554.     If fmemp = True Then
  555.         acum = Val(lblDisplay.Text)
  556.         mem1 = acum / mem1
  557.         acum = 0
  558.     Endif
  559.   
  560.  
  561.  
  562. inv = False
  563. cmdINV.Background = &H808080
  564. segunda = False
  565. cmd2nd.Background = &H808080
  566.  
  567.  
  568. Public Sub cmd2_Click()
  569. 'Esta tecla pone en display un 2
  570. 'Es Mem2 para STO
  571. 'Es Mem2 para RCL
  572. 'Es Mem2 para EXC con 2nd
  573. 'Es Mem2 para SUM
  574. 'Es Mem2 para RESTA con INV
  575. 'Es Mem2 para PROD con 2nd
  576. 'Es Mem2 para DIV con 2nd e INV
  577. 'Convierte de DEG a RAD con 2nd
  578. 'Convierte de RAD a DEG con 2nd e INV
  579.  
  580. If segunda = False And inv = False Then
  581.     If fmemw = False Then
  582.         If fmems = False Then
  583.             If cuenta = 0 Then
  584.                 lblDisplay.Text = "2"
  585.             Else
  586.                 lblDisplay.Text = lblDisplay.Text & "2"
  587.             Endif
  588.             cuenta = cuenta + 1
  589.         Endif
  590.     Endif
  591.     
  592.     If fmemw = True Then
  593.         mem2 = Val(lblDisplay.Text)
  594.         fmemw = False
  595.         cuenta = 0
  596.     Endif
  597.     
  598.     If fmemr = True Then
  599.         lblDisplay.Text = mem2
  600.         fmemr = False
  601.         cuenta = 0
  602.     Endif
  603.     
  604.     If potencia = True Then
  605.         acum = Val(lblDisplay.Text)
  606.         xx = acum
  607.         cuenta = 0
  608.     Endif
  609.     
  610.     If fmems = True Then                ' Sumar una cantidad a la MEM 2
  611.         mem2 = mem2 + acum
  612.         fmems = False
  613.         cuenta = 0
  614.     Endif
  615.  
  616.  
  617. If segunda = True And inv = False Then      ' Convierte DEG a RAD
  618.     If fmemp = False And fmeme = False Then
  619.         acum = Val(lblDisplay.Text)
  620.         lblDisplay.Text = acum * Pi / 180
  621.         acum = 0
  622.         cuenta = 0
  623.     Endif
  624.  
  625.     If fmemp = True And fmeme = False Then
  626.         mem2 = mem2 * acum
  627.         acum = 0
  628.         cuenta = 0
  629.     Endif
  630.     
  631.     If fmeme = True Then
  632.         tempo1 = mem2
  633.         mem2 = Val(lblDisplay.Text)
  634.         lblDisplay.Text = tempo1
  635.         tempo1 = 0
  636.         acum = 0
  637.     Endif
  638.  
  639.  
  640. If segunda = False And inv = True Then      ' RESTA (INV SUM) a Memoria2
  641.  
  642.  
  643.  
  644.  
  645. If segunda = True And inv = True Then       '
  646.     If fmemp = False Then
  647.         acum = Val(lblDisplay.Text)
  648.         lblDisplay.Text = acum * 180 / Pi
  649.         acum = 0
  650.         cuenta = 0
  651.     Endif
  652.  
  653.     If fmemp = True Then                    ' DIV (INV PROD) a Memoria2
  654.         acum = Val(lblDisplay.Text)
  655.         mem2 = acum / mem2
  656.         acum = 0
  657.         cuenta = 0
  658.     Endif
  659.  
  660.  
  661.  
  662. inv = False
  663. cmdINV.Background = &H808080
  664. segunda = False
  665. cmd2nd.Background = &H808080
  666.  
  667.  
  668. Public Sub cmd3_Click()
  669. 'Esta tecla pone en display un 3
  670. 'Es Mem3 para STO
  671. 'Es Mem3 para RCL
  672. 'Es Mem3 para EXC con 2nd
  673. 'Es Mem3 para SUM
  674. 'Es Mem3 para RESTA con INV
  675. 'Es Mem3 para PROD con 2nd
  676. 'Es Mem3 para DIV con 2nd e INV
  677. 'Convierte de GRAD a RAD con 2nd
  678. 'Convierte de RAD a GRAD con 2nd e INV
  679.  
  680. If segunda = False And inv = False Then
  681.     If fmemw = False Then
  682.         If fmems = False Then
  683.             If cuenta = 0 Then
  684.                 lblDisplay.Text = "3"
  685.             Else
  686.                 lblDisplay.Text = lblDisplay.Text & "3"
  687.             Endif
  688.         cuenta = cuenta + 1
  689.         Endif
  690.     Endif
  691.     
  692.     If fmemw = True Then
  693.         mem3 = Val(lblDisplay.Text)
  694.         fmemw = False
  695.         cuenta = 0
  696.     Endif
  697.     
  698.     If fmemr = True Then
  699.         lblDisplay.Text = mem3
  700.         fmemr = False
  701.         cuenta = 0
  702.     Endif
  703.     
  704.     If potencia = True Then
  705.         acum = Val(lblDisplay.Text)
  706.         xx = acum
  707.         cuenta = 0
  708.     Endif
  709.     
  710.     If fmems = True Then        ' Sumar una cantidad a la MEM 3
  711.         mem3 = mem3 + acum
  712.         fmems = False
  713.         cuenta = 0
  714.     Endif
  715.  
  716.  
  717. If segunda = True And inv = False Then      ' Convierte de GRAD a RAD
  718.     If fmemp = False And fmeme = False Then
  719.         acum = Val(lblDisplay.Text)
  720.         lblDisplay.Text = acum * Pi / 200
  721.         acum = 0
  722.         cuenta = 0
  723.     Endif
  724.     
  725.     If fmemp = True And fmeme = False Then
  726.         mem3 = mem3 * acum
  727.         acum = 0
  728.         cuenta = 0
  729.     Endif
  730.     
  731.     If fmeme = True Then
  732.         tempo1 = mem3
  733.         mem3 = Val(lblDisplay.Text)
  734.         lblDisplay.Text = tempo1
  735.         tempo1 = 0
  736.         acum = 0
  737.     Endif
  738.     
  739.  
  740. If segunda = False And inv = True Then      ' RESTA (INV SUM) a Memoria3
  741.  
  742.  
  743.  
  744.  
  745. If segunda = True And inv = True Then       ' Convierte de RAD a GRAD o DIV (INV PROD) a Memoria1
  746.     If fmemp = False Then
  747.         acum = Val(lblDisplay.Text)
  748.         lblDisplay.Text = acum * 200 / Pi
  749.         acum = 0
  750.         cuenta = 0
  751.     Endif
  752.     
  753.     If fmemp = True Then                    ' DIV entre un numero y Memoria 3
  754.         acum = Val(lblDisplay.Text)
  755.         mem3 = acum / mem3
  756.         acum = 0
  757.         cuenta = 0
  758.     Endif
  759.  
  760.  
  761. inv = False
  762. cmdINV.Background = &H808080
  763. segunda = False
  764. cmd2nd.Background = &H808080
  765.  
  766.  
  767. Public Sub cmd4_Click()
  768. If segunda = False And inv = False Then
  769.     If cuenta = 0 Then
  770.         lblDisplay.Text = "4"
  771.     Else
  772.         lblDisplay.Text = lblDisplay.Text & "4"
  773.     Endif
  774.     cuenta = cuenta + 1
  775.  
  776. If segunda = True And inv = False Then
  777.     acum = Val(lblDisplay.Text)
  778.     lblDisplay.Text = acum * 25.4
  779.     acum = 0
  780.  
  781. If segunda = True And inv = True Then
  782.     acum = Val(lblDisplay.Text)
  783.     lblDisplay.Text = acum / 25.4
  784.     acum = 0
  785.  
  786.  
  787.  
  788. If potencia = True Then
  789.     acum = Val(lblDisplay.Text)
  790.     xx = acum
  791.  
  792. inv = False
  793. cmdINV.Background = &H808080
  794. segunda = False
  795. cmd2nd.Background = &H808080
  796.  
  797. Public Sub cmd5_Click()
  798. If segunda = False And inv = False Then
  799.     If cuenta = 0 Then
  800.         lblDisplay.Text = "5"
  801.     Else
  802.         lblDisplay.Text = lblDisplay.Text & "5"
  803.     Endif
  804.     cuenta = cuenta + 1
  805.  
  806. If segunda = True And inv = False Then
  807.     acum = Val(lblDisplay.Text)
  808.     lblDisplay.Text = acum * 3.785411784
  809.     acum = 0
  810.  
  811. If segunda = True And inv = True Then
  812.     acum = Val(lblDisplay.Text)
  813.     lblDisplay.Text = acum / 3.785411784
  814.     acum = 0
  815.  
  816. If potencia = True Then
  817.     acum = Val(lblDisplay.Text)
  818.     xx = acum
  819.  
  820. inv = False
  821. cmdINV.Background = &H808080
  822. segunda = False
  823. cmd2nd.Background = &H808080
  824.  
  825.  
  826. Public Sub cmd6_Click()
  827. If segunda = False And inv = False Then
  828.     If cuenta = 0 Then
  829.         lblDisplay.Text = "6"
  830.     Else
  831.         lblDisplay.Text = lblDisplay.Text & "6"
  832.     Endif
  833.     cuenta = cuenta + 1
  834.  
  835. If segunda = True And inv = False Then
  836.     acum = Val(lblDisplay.Text)
  837.     lblDisplay.Text = acum * 0.45359237
  838.     acum = 0
  839.  
  840. If segunda = True And inv = True Then
  841.     acum = Val(lblDisplay.Text)
  842.     lblDisplay.Text = acum / 0.45359237
  843.     acum = 0
  844.  
  845. inv = False
  846. cmdINV.Background = &H808080
  847. segunda = False
  848. cmd2nd.Background = &H808080
  849.  
  850.  
  851. Public Sub cmd7_Click()
  852. If cuenta = 0 Then
  853. lblDisplay.Text = "7"
  854. lblDisplay.Text = lblDisplay.Text & "7"
  855.  
  856. If potencia = True Then
  857.     acum = Val(lblDisplay.Text)
  858.     xx = acum
  859.  
  860. cuenta = cuenta + 1
  861.  
  862.  
  863.  
  864. Public Sub cmd8_Click()
  865. If cuenta = 0 Then
  866. lblDisplay.Text = "8"
  867. lblDisplay.Text = lblDisplay.Text & "8"
  868.  
  869. If potencia = True Then
  870.     acum = Val(lblDisplay.Text)
  871.     xx = acum
  872.  
  873. cuenta = cuenta + 1
  874.  
  875.  
  876.  
  877. Public Sub cmd9_Click()
  878. If cuenta = 0 Then
  879. lblDisplay.Text = "9"
  880. lblDisplay.Text = lblDisplay.Text & "9"
  881.  
  882. If potencia = True Then
  883.     acum = Val(lblDisplay.Text)
  884.     xx = acum
  885.  
  886. cuenta = cuenta + 1
  887.  
  888.  
  889.  
  890. Public Sub cmdCLR_Click()
  891.  
  892. If segunda = False Then
  893.     lblDisplay.Text = "0"
  894.     cuenta = 0
  895.     acum = 0
  896.     
  897.     punto = False
  898.     suma = False
  899.     resta = False
  900.     multiplica = False
  901.     divide = False
  902.     raiz = False
  903.     segunda = False
  904.     inv = False
  905.     
  906.     cmdINV.Background = &H808080
  907.     cmd2nd.Background = &H808080
  908.  
  909. If segunda = True Then
  910.  
  911.     mean = 0
  912.     numdato = 0
  913.     varianza = 0
  914.     sdev = 0
  915.     mem1 = 0
  916.     cuenta = 0
  917.         
  918.     For ii = 0 To 31
  919.     dato[ii] = 0
  920.     Next
  921.     
  922.     deg = True
  923.     grad = False
  924.     rad = False
  925.     
  926.     lblDisplay.Text = "0"
  927.     lblgrados.Caption = "DEG"
  928.  
  929. segunda = False
  930. cmd2nd.Background = &H808080
  931.  
  932.  
  933. Public Sub cmdIgual_Click()
  934. cuenta = 0
  935. If segunda = False Then
  936.     If suma = True And porciento = False Then
  937.         acum = acum + Val(lblDisplay.Text)
  938.         suma = False
  939.         lblDisplay.Text = acum
  940.     Endif
  941.     
  942.     If suma = True And porciento = True Then
  943.       acum = Val(lblDisplay.text)
  944.       acum = xx + acum
  945.       lblDisplay.Text = acum
  946.       acum = 0
  947.       xx = 0
  948.       yy = 0
  949.       porciento = False
  950.     Endif
  951.         
  952.     If resta = True Then
  953.         acum = acum - Val(lblDisplay.Text)
  954.         resta = False
  955.         lblDisplay.Text = acum
  956.     Endif
  957.     
  958.     If potencia = True Then
  959.         acum = yy ^ Val(lblDisplay.Text)
  960.         lblDisplay.Text = acum
  961.     Endif
  962.     
  963.     If divide = True Then
  964.         If Val(lblDisplay.Text) <> 0 Then
  965.             acum = acum / Val(lblDisplay.Text)
  966.             lblDisplay.Text = acum
  967.             divide = False
  968.         Else
  969.             lblDisplay.Text = "Error"
  970.         Endif
  971.     Endif
  972.     
  973.     If multiplica = True Then
  974.         acum = acum * Val(lblDisplay.Text)
  975.         lblDisplay.Text = acum
  976.         multiplica = False
  977.     Endif
  978.     
  979.     If raiz = True Then
  980.         tempo1 = Val(lblDisplay.Text)
  981.         acum = acum ^ (1 / tempo1)
  982.         lblDisplay.Text = acum
  983.         tempo1 = 0
  984.         acum = 0
  985.     Endif
  986.     
  987.     If porciento = True And suma = False And resta = False Then
  988.       If suma = False
  989.         yy = Val(lblDisplay.Text)
  990.         acum = (yy * 100 / xx) - 100
  991.         lblDisplay.Text = acum
  992.         acum = 0
  993.         xx = 0
  994.         yy = 0
  995.         porciento = False
  996.       Endif
  997.  
  998.       If suma = True And porciento = True Then
  999.         yy = Val(lblDisplay.Text)
  1000.         acum = acum + (acum * Val(lblDisplay.Text))
  1001.         lblDisplay.Text = acum
  1002.         acum = 0
  1003.         xx = 0
  1004.         yy = 0
  1005.       Endif
  1006.       
  1007.     Endif
  1008.     
  1009.     punto = False
  1010.  
  1011. If segunda = True Then
  1012. grad = True
  1013. lblgrados.Caption = "GRAD"
  1014. segunda = False
  1015.  
  1016. segunda = False
  1017. cmd2nd.Background = &H808080
  1018. potencia = False
  1019. cmd2nd.Background = &H808080
  1020.  
  1021.  
  1022. Public Sub cmdMas_Click()
  1023. If segunda = False Then
  1024.     punto = False
  1025.     acum = Val(lblDisplay.Text)
  1026.     xx = acum
  1027.     suma = True
  1028.     cuenta = 0
  1029.  
  1030. If segunda = True Then
  1031. Dim valor As Integer
  1032.     valor = Int(Val(lblDisplay.Text))
  1033.  
  1034. inv = False
  1035. cmdINV.Background = &H808080
  1036. segunda = False
  1037. cmd2nd.Background = &H808080
  1038.  
  1039.  
  1040. Public Sub cmdMenos_Click()
  1041. punto = False
  1042. acum = Val(lblDisplay.Text)
  1043. resta = True
  1044. cuenta = 0
  1045.  
  1046.  
  1047. Public Sub cmdPunto_Click()
  1048. If segunda = False And punto = False Then
  1049.     If cuenta = 0 Then
  1050.         lblDisplay.Text = "0."
  1051.         punto = True
  1052.     Else
  1053.         If punto = False Then
  1054.             lblDisplay.Text = lblDisplay.Text & "."
  1055.             punto = True
  1056.         Endif
  1057.     Endif
  1058.     cuenta = cuenta + 1
  1059.  
  1060. If segunda = True Then
  1061.     lblgrados.Caption = "DEG"
  1062.     deg = True
  1063.     grad = False
  1064.     rad = False
  1065.  
  1066. segunda = False
  1067. cmd2nd.Background = &H808080
  1068.  
  1069.  
  1070. Public Sub cmdRCL_Click()
  1071. If segunda = False And inv = False Then     ' RCL
  1072. fmemr = True
  1073.  
  1074. If segunda = True And inv = False Then      ' EXC Intercambia Display con Memorias
  1075. fmeme = True
  1076.  
  1077. If segunda = False And inv = True Then     ' RCL
  1078. fmemr = True
  1079.  
  1080. If segunda = True And inv = True Then       ' EXC Intercambia Display con Memorias
  1081. fmeme = True
  1082.  
  1083.  
  1084.  
  1085.  
  1086. Public Sub cmdPorciento_Click()
  1087. If segunda = False And suma = False Then
  1088.   xx = Val(lblDisplay.Text)
  1089.   xx = xx * 0.01
  1090.   lblDisplay.Text = xx
  1091.   porciento = True
  1092.  
  1093. If segunda = False And suma = True Then
  1094.   yy = Val(lblDisplay.text)
  1095.   yy = xx * yy * 0.01
  1096.   lblDisplay.Text = yy
  1097.   porciento = True
  1098.   
  1099. If segunda = True Then
  1100.   deltaporc = True
  1101.   xx = Val(lblDisplay.Text)
  1102.   cuenta = 0
  1103.  
  1104. punto = False
  1105. segunda = False
  1106. cmd2nd.Background = &H808080
  1107.  
  1108.  
  1109.  
  1110. Public Sub cmdSeno_Click()
  1111. Dim valor As Float
  1112.  
  1113. If segunda = False And inv = False Then
  1114.     If deg = True Then
  1115.         valor = Val(lblDisplay.Text) * Pi / 180
  1116.         lblDisplay.Text = Sin(valor)
  1117.     Endif
  1118.     
  1119.     If rad = True Then
  1120.         valor = Val(lblDisplay.Text)
  1121.         lblDisplay.Text = Sin(valor)
  1122.     Endif
  1123.     
  1124.     If grad = True Then
  1125.         valor = Val(lblDisplay.Text) * Pi / 200
  1126.         lblDisplay.Text = Sin(valor)
  1127.     Endif
  1128.  
  1129. If segunda = True And inv = False Then
  1130.     If deg = True Then
  1131.         valor = Val(lblDisplay.Text) * Pi / 180
  1132.         lblDisplay.Text = (Exp(valor) - Exp(-valor)) / 2
  1133.     Endif
  1134.     
  1135.     If rad = True Then
  1136.         valor = Val(lblDisplay.Text)
  1137.         lblDisplay.Text = (Exp(valor) - Exp(-valor)) / 2
  1138.     Endif
  1139.     
  1140.     If grad = True Then
  1141.         valor = Val(lblDisplay.Text) * Pi / 200
  1142.         lblDisplay.Text = (Exp(valor) - Exp(-valor)) / 2
  1143.     Endif
  1144.  
  1145. If segunda = False And inv = True Then      ' Angulo con INV sin x
  1146.     If deg = True Then
  1147.         valor = Val(lblDisplay.Text)
  1148.         acum = Atn(valor / Sqr(-valor * valor + 1)) * 180 / Pi
  1149.         lblDisplay.Text = acum
  1150.     Endif
  1151.     
  1152.     If rad = True Then
  1153.         valor = Val(lblDisplay.Text)
  1154.         tempo1 = Sqr(-valor * valor + 1)
  1155.         If tempo1 > 0 Then
  1156.             lblDisplay.Text = Atn(valor / Sqr(-valor * valor + 1))
  1157.             valor = 0
  1158.             tempo1 = 0
  1159.         Else
  1160.             lblDisplay.Text = "Error"
  1161.             valor = 0
  1162.             tempo1 = 0
  1163.         Endif
  1164.     Endif
  1165.     
  1166.     If grad = True Then
  1167.         valor = Val(lblDisplay.Text)
  1168.         lblDisplay.Text = Atn(valor / Sqr(-valor * valor + 1)) * 200 / Pi
  1169.     Endif
  1170.  
  1171. If segunda = True And inv = True Then      ' Inversa sinh x
  1172.     If deg = True Then
  1173.         valor = Val(lblDisplay.Text)
  1174.         lblDisplay.Text = Log(valor * Sqr(valor * valor + 1)) * 180 / Pi
  1175.     Endif
  1176.     
  1177.     If rad = True Then
  1178.         valor = Val(lblDisplay.Text)
  1179.         lblDisplay.Text = Log(valor * Sqr(valor * valor + 1))
  1180.     Endif
  1181.     
  1182.     If grad = True Then
  1183.         valor = Val(lblDisplay.Text)
  1184.         lblDisplay.Text = Log(valor * Sqr(valor * valor + 1)) * 200 / Pi
  1185.     Endif
  1186.  
  1187. inv = False
  1188. cmdINV.Background = &H808080
  1189. segunda = False
  1190. cmd2nd.Background = &H808080
  1191.  
  1192.  
  1193. Public Sub cmdSTO_Click()
  1194. If segunda = False Then
  1195.     'mem = Val(lblDisplay.Text)
  1196.     fmemw = True
  1197.  
  1198. If segunda = True Then
  1199.     fixes = True
  1200.  
  1201.  
  1202. Public Sub cmdSalir_Click()


 

[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.
    ¡Gracias!
#2

Buen trabajo AlfredoSC.

¿ Y el proyecto donde se encuentra ?. Wink

Saludos

"El buen perfume en frasco pequeño se vende"
    ¡Gracias!
#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.
    ¡Gracias!
#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'
    ¡Gracias!
#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.
    ¡Gracias!
#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'
    ¡Gracias!
#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
    ¡Gracias!
#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]

Es mejor saber un poco de todo, que todo de muy poco. Lo primero, garantiza la supervivencia humana.
    ¡Gracias!
#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]
    ¡Gracias!
#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.
    ¡Gracias!


Posibles temas similares…
Tema / Autor Respuestas Vistas Último mensaje
Último mensaje por vuott
04-12-2021, 01:02

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)