• Jueves 28 de Marzo de 2024, 11:40

Autor Tema:  Calculadora Cientifica  (Leído 24449 veces)

vmjmb1

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Calculadora Cientifica
« en: Jueves 24 de Septiembre de 2009, 01:38 »
0
hola.

Tengo 3 dias en la programacion y estoy en mi 2do proyecto pero noc como terminarlo tengo algunos codigos pero me hacen falta algunos lo que estoy haciendo es una calculadora cientifica pero noc como hacer para que la respuesta me salga en el Textbox ya que lo unico que e podido hacer es que me salga en un Msgbox ahi e hecho que me salga la Raiz y el Porcentaje si me pueden decir como hacer para que me salga en un textbox solamente en 1 textbox asi como la calculadora de windows y tambien ayudenme a hacer la tangente,sen y coseno es que como recien estoy empezando no se como se hace y por mas que busco en internet no encuentro alguna solucion para mi problema.

Aca les dejo los codigos con los que estoy trabajando ahorita mi Calculadora esta un poco fea xq los numeros me salen en el Textbox1 mas no en el 2 ni en el 3 luego la raiz y el porcentaje me salen en un msgbox y para sumar restar y dividir solo se hacerlo en 3 text box mas no en 1 porfavor ayudenme.

para raiz estoy haciendo asi:

Dim x, r, incr, tol, s As Double
x = TextBox1.Text
r=1
incr=1
tol=0.0001
Do While incr > tol
if r*r = x then
incr = tol
end if
s=r + incr
if s*s > x then
incr = incr/2
else
r=s
end if
loop
MsgBox("esta es tu raiz" & " " & r)

para el porcentaje lo he hecho asi

dim x,y,a As Double
x = textbox1.text
y = textbox2.text
a = x/100*y
if x/100*y = a then
MsgBox("este es tu porcentaje" & " " & a)

la potencia:

Dim x, a As integer
x = textbox1.text
a = x*x
if x*x = a then
MsgBox(x & " " & "al cuadrado es" & " " & a)

la suma resta division multiplicacion y division la estoy haciendo asi
textbox3.text = val(textbox1.text) + val(textbox2.text)
textbox3.text = textbox1.text - textbox2.text
textbox3.text = textbox1.text * textbox2.text
textbox3.text = textbox1.text / textbox2.text

y los numeros los estoy poniendo asi

textbox1.text = textbox1.text & "1"  
'entre las comillas va lo que quiero que funcione.

Alguien que me ayude a ordenar todo esto para que todo pueda ponerlo con un solo textbox porfavor
y si tambien me puede ayudar con la tangente seno y coseno.

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Calculadora Cientifica
« Respuesta #1 en: Jueves 24 de Septiembre de 2009, 06:50 »
0
No te he entendido apenas nada de lo que quieres... porque te explicas muy mal.

El código es muy pobre pero como dices que eres principiante, se entiende...

Veamos, la raíz es a la potencia lo que la división a la multiplicación y lo que la suma a la resta. Por lo tanto debería serte fácil encontrar una solución óptima con sólo una línea para calcularlo...

Seguimos, el seno, coseno, tangente y demás  funciones trigonómetricas, incluídas las derivadas (de estas) las tiene VB como funciones... ve a la ayuda de VB y escribe para buscar 'Funciones matemáticas' y 'Funciones matemáticas derivadas'.

El visor no tiene porque ser de una sóla línea, de hecho es más útil un visor multilínea, es más útil porque no te obliga como usuario a memorizar el valor que acabas de introducir, puedes verificar que no te equivocaste al pulsarlo, y además al término de la operación puede servirte para una nueva operación sin tener que volver a introducir de nuevolos 2 operandos y la operación :
Código: Text
  1. Linea 1 operando 1
  2. linea 2 operación que se quiere aplicar
  3. linea 3 operando 2
  4. linea 4 resultado, entre la línea 3 y la 4 pones una rayita (control line, por ejemplo)
  5.  


... y finalmente, para que todo lo hagas usando un único textbox, tienes que guardar el dato previo...
repásate este hilo: http://foros.solocodigo.com/viewtopic.php?f=143&t=40556  pués lo que en él explico, se aplica a tu problema... puedes usar propiedades para retener los datos y verificar el valor introducido, no obstante como eres principante, seguiremos un método que no recurre a propiedades y es más directo y asequible para tí.

Te lo resumo... de entrada tendremos varios botones de operaciones por ejemplo suma, resta, div.., mult... etc... y uno para borrar (suspender la operación en curso).
Igualmente tenemos, otros botones que representan las cifras (no queremos que introduzcan k, si no números y mejor si les proveemos los números como botones...)

La operativa es la siguiente:
1:   introducir 1 número (operando1)
2:  elegir una operación, sólo cuando el usuario elija una operación guardamos la cifra actual que hay en el visor (nuestro textbox) operando1= val(text1.text) y borramos el visor... o mejor desactivamos este visor y activamos uno justo debajo.
3: introducir otra cifra, sólo si el usuario elige una cifra en este paso, guardamos la operación que eligió el usuario, en el paso 2 (se hace ahora, porque el usuario puede pulsar varias teclas de operaciones, dejaremos como activa la última pulsada).
4: elegir otra operación..., sólo si es una operación guardamos la cifra actual del visor operando2=val( text1.text), la operación esperada es '=', pero no importa, si es un botón de operación, hacemos una llamada a calcular, acto seguido si la operación no era igual ('='), está se guarda como operación y la cifra calculada como operando1, por lo que estaríamos de nuevo a la espera del paso 3...


-----------------

Para hacer la calculadora, cómodamente añades un botón le llamas comCifra en el caption pones el texto '0', y en la propiedad index le pones 0, copia ese botón y pégalo 9 veces, ya tienes una matriz de 10 botones llamados cifras, cuyo index coincide con el valor, cambia el caption de los nuevos botones al valor que indica la propiedad index... distribúyelos ordenadamente en el formulario...
El código (del visor de 1 línea) sería, más o menos:
Código: Visual Basic
  1.  
  2. Private Sub ComCifras_Click(Index As Integer)
  3.     If paso Mod 2 = 0 Then ' si el paso es par (osea 0,2,4)
  4.         If paso = 2 Then
  5.             paso = 3
  6.         Else
  7.             paso = 1
  8.         End If
  9.         Text1.Text = "" ' se van a escribir cifras, borramos lo que halla
  10.     End If
  11.     ' está introduciendo valores numéricos
  12.     Text1.Text = Text1.Text & CStr(Index)
  13. End Sub
  14.  
  15.  

Ahora coloca otro botón en el formulario llámalo ComOperacion, en el caption pon '=', y en la propiedad index el valor 0, copia este control y pégalo varias veces (1 por cada operación que quieras hacer)... tendrás una matriz de botones de operacion, cambia los caption para que reflejen lo que hacen '+' , '-', ... no importa la distribución ni el orden, pero ponlos que queden bien presentados en el formulario...(yo he reservado 'en este ejemplo' el 0 para '=' el 1 para borrar operaciones 2, para sumar, 3 para '-', 4 para '*', 5 para '/' 6 para potencioas y 7 para raíces, si los cambias deberás adecuar en el código dichos cambios) el código es más  o menos éste:

Código: Visual Basic
  1.  
  2. Private Sub ComOperacion_Click(Index As Integer)
  3.     Dim t1 As Single  ' para hacer una breve pausa si procede
  4.        
  5.     If Index = 1 Then ' operación de resetear la operación en curso (típicamente llamada Clear)
  6.         paso = 1
  7.         operando1 = 0
  8.         operando2 = 0
  9.         Operacion = 0
  10.         Text1.Text = ""
  11.     Else
  12.         If paso = 1 Or paso = 3 Then
  13.             If paso = 1 Then
  14.                 operando1 = Val(Text1.Text)
  15.                 Text1.Text = ComOperacion(Index).Caption
  16.                 paso = 2
  17.                 Operacion = Index
  18.             Else
  19.                   ' recogemos el operando 2 y calculamos
  20.                Operando2 = Val(Text1.Text)
  21.                 Text1.Text = Calcular
  22.                
  23.                 ' el resultado se toma como operand1, salvo que se borre.
  24.                Operando1 = Val(Text1.Text)
  25.                 Paso = 2
  26.                
  27.                 Me.Enabled = False
  28.                 Text1.ForeColor = vbRed
  29.                 ' proporcionamos una espera de 3 segundos para ver el resultado
  30.                t1 = Timer
  31.                 Do
  32.                     DoEvents
  33.                 Loop While (Timer - t1) < 2
  34.                
  35.                 If Index <> 0 Then ' miramos que operación se ha elegido
  36.                    Text1.Text = ComOperacion(Index).Caption ' después de la pausa colocamos el nuevo operador en el visor
  37.                    Operacion = Index
  38.                 End If
  39.                 Text1.ForeColor = vbGreen
  40.                 Me.Enabled = True
  41.             End If
  42.         Else
  43.             Operacion = Index
  44.             Text1.Text = ComOperacion(Index).Caption
  45.         End If
  46.     End If
  47. End Sub
  48.  
  49.  

Ya sólo falta el código de la función de cálculo,  sólo te pongo las 6 operaciones más comunes el resto va de tu cuenta... (si, también te pongo las raíces)

nota que los códigoos de operación 0 y 1 no son operaciones de cálculo si no de control... 0 solicita calcular el resultado y 1 limpia el visor y establece todos los valores a valores por defecto.
Código: Visual Basic
  1.  
  2. Private Function Calcular() As String
  3.     Dim resul As Double, k as byte
  4.    
  5.     Select Case Operacion
  6.         Case 2 ' sumar
  7.             Calcular = CStr(operando1 + operando2)
  8.         Case 3 ' Restar
  9.             Calcular = CStr(operando1 - operando2)
  10.         Case 4 ' Multiplica
  11.             Calcular = CStr(operando1 * operando2)
  12.         Case 5 ' Dividir
  13.             If operando2 <> 0 Then
  14.                 Calcular = CStr(operando1 / operando2)
  15.             Else
  16.                 Calcular = "División por 0 - Error"
  17.             End If
  18.         Case 6 ' potencias
  19.             resul = operando1
  20.             For k = 1 To operando2
  21.                 resul = resul * operando1
  22.             Next
  23.             Calcular = CStr(resul)
  24. '            ' si no quieres calcular con el bucle
  25. '            Calcular = CStr(operando1 ^ operando2)
  26.         Case 7 ' raíces
  27.             Calcular = CStr(operando1 ^ (1 / operando2))
  28.         Case 8 '''''
  29.             ' otros cálculos.....
  30.     End Select
  31. End Function
  32.  
  33.  

Finalmente para que quede todo bien le damos vistosidad al visor.... No se si tendrás la fuente llamada LCDD

Código: Visual Basic
  1.  
  2. Private Sub Form_Load()
  3.     Me.ScaleMode = vbPixels
  4.     Me.FontName = "LcdD"  ' fuente que elegimos,
  5.     Me.FontSize = 16
  6.     Me.FontBold = True   ' negrita
  7.     With Text1
  8.         .BackColor = vbBlack      ' fondo del visor en negro, por supuesto
  9.         .ForeColor = vbGreen    ' texto en verde, por supuesto
  10.         .FontBold = True
  11.         .FontName = "LcdD"
  12.         .FontSize = 16
  13.         .MaxLength = 10 ' sólo admite 10 cifras...
  14.         .Alignment = vbRightJustify                 ' texto alineado a la derecha, por supuesto
  15.         .Height = Me.TextHeight("9") + 4      ' damos tamaño al textbox, para que no quede desproporcionado con la feunte elegida.
  16.         .Width = Me.TextWidth("División por cero - ERROR  ") ' sólo admitimos 10 cifras, pero este texto es lo más largo que saldrá...
  17.     End With
  18. End Sub
  19.  
  20.  

Nota que no he declarado las variables que usamos, pero conviene que las declares (paso, operando1, operando2 y operacion)
El código no está probado por lo que no se descarta que haya algún error o no funcione del todo como se espera, ya es cosa tuya corregir y afinar detalles. También queda a tu esfuerzo añadir otras operaciones más complejas... añadir funcionalidad de decimales , errores de desbordamiento,  etc...  pero ya tienes un esqueleto sobre el que trabajar....

Saludos...
« última modificación: Jueves 24 de Septiembre de 2009, 21:26 por Nebire »
«Ma non troppo»
----> ModoVacaciones = False<----

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Calculadora Cientifica
« Respuesta #2 en: Jueves 24 de Septiembre de 2009, 19:50 »
0
La calculadora (de visor) multilínea es más fácil de hacer y de entender...

Como te comentaba en el apartadoanterior (me cito)
Citar
es más útil un visor multilínea, es más útil porque no te obliga como usuario a memorizar el valor que acabas de introducir, puedes verificar que no te equivocaste al pulsarlo, y además al término de la operación puede servirte para una nueva operación sin tener que volver a introducir de nuevo los 2 operandos y la operación (si estos no cambian)
.

Por tanto el diseño en cuanto a botones de operaciones y a botones de cifras es igual pero para el visor disponemos 4 textbox, verticalmente, distribuídos así
1, TxtVisor(0) es el visor del operando1
2, txtVisor(1) es el visor de la operación
3, txtVisor(2) es el operando2
0, line1 es una línea de separación
4, txtVisor(3) es el visor del resultado
5 a la izquierda hay un control option sobre el visor de ambos operandos, sus indices son los mismos que el txtVisor correspondiente... Estos controles sirven para indicar a cual de ellos van las teclas decifras pulsadas...
Cada visor tiene 2 botones adicionales a su derecha que pasamos a describir
Sobre el visor del operando 0, el botón 1 pone a 0 el valor, el 2º boton pasa el valor del operando 1 al 2
Sobre el visor del operando 1 el boton 1º pone a 0 el operando 2, el 2º botón pasa el valor del operando 2 al 1
sobre el visor de operación, el botón 1 borra ambos operandos, el botón 2º intercambia los operandos el 1 por el 2 y el 2 por el 1
sobre el visor de resultado,  el botón 1 transfiere el resultado al operando 1 el 2º botón transfiere el resultado al botón 2
Cuando se pulsa cualquiera de estos botones,(de cifras y de operaciones) el color del texto del visor del resultado se pone en naranja, queriendo indicar con ello que el resultado que aparece (si lo hay) no es el resultado de los datos actuales reflejados en el visor.... este vuelve a cambiar a verde cuando se pulsa la operación '=' , sólo cuando se pulsa ese botón se pone en verde.

el código es más fácilmente deducible.... el código cuando se pulsan las cifras sería éste..
Código: Visual Basic
  1.  
  2. private const Naranja= rgb(255,128,64)  ' naranja
  3.  
  4. Private Sub ComCifras_Click(Index As Integer)
  5.      ' está introduciendo valores numéricos , se añaden por la derecha como se escriben los números...
  6.    
  7.     TxtVisor(OperandoActivo).Text = TxtVisor(OperandoActivo).Text & CStr(Index)
  8.     txtVisor(3).forecolor= Naranja
  9. End Sub
  10.  
  11.  

El código cuando se pulsa las teclas de operación, también es simple para las operaciones actuales que requieren 2 operandos...
Código: Visual Basic
  1.  
  2. Private Sub ComOperacion_Click(Index As Integer)
  3.         if index > 1 then
  4.             TxtVisor(1).Text = ComOperacion(Index).Caption
  5.             txtVisor(3).forecolor= Naranja
  6.             Operacion=index
  7.         else  ' boton reset o boton de calcular ('=')
  8.             If index=0 then
  9.                   txtVisor(3).Text = Calcular
  10.                   txtVisor(3).forecolor= vbgreen      ' sólo en este caso y en este momento, el visor de resultado es verde
  11.             else    ' aquí hacemos como en el apartado anterior todo a 0
  12.                   txtVisor(0).Text = "0"
  13.                   txtVisor(1).Text = ""
  14.                   txtVisor(2).Text = "0"
  15.                   txtVisor(3).Text  = ""
  16.             End If  
  17.        end if  
  18. end sub
  19.  
  20.  

El código de calcular es casi idéntico, al del apartado anterior, de hecho es el mismo sólo que antecemos 2 líneas para tomar los operandos:

Código: Visual Basic
  1.  
  2. Private Function Calcular() As String
  3.     Dim resul As Double, k as byte
  4.    
  5.     operando1 = Val(txtVisor(0).Text )
  6.     operando2 = Val(txtVisor(2).Text )
  7.  
  8.     Select Case Operacion
  9.         Case 2 ' sumar
  10.             Calcular = CStr(operando1 + operando2)
  11.         Case 3 ' Restar
  12.             Calcular = CStr(operando1 - operando2)
  13.         Case 4 ' Multiplica
  14.             Calcular = CStr(operando1 * operando2)
  15.         Case 5 ' Dividir
  16.             If operando2 <> 0 Then
  17.                 Calcular = CStr(operando1 / operando2)
  18.             Else
  19.                 Calcular = "División por 0 - Error"
  20.             End If
  21.         Case 6 ' potencias
  22.             resul = operando1
  23.             For k = 1 To operando2
  24.                 resul = resul * operando1
  25.             Next
  26.             Calcular = CStr(resul)
  27. '            ' si no quieres calcular con el bucle
  28. '            Calcular = CStr(operando1 ^ operando2)
  29.         Case 7 ' raíces
  30.             Calcular = CStr(operando1 ^ (1 / operando2))
  31.         Case 8 '''''
  32.             ' otros cálculos.....
  33.     End Select
  34. End Function
  35.  
  36.  

Nos falta sólo el código de los botones a la derecha de cada visor, primero crearemos los controles y como tienen la misma funcionalidad nos será más cómodo tratarlos juntos como una matriz. Por tanto añadimos unnuevo botón le cambiamos el nombre a comVisor y le establecemos la propiedad index a 0 , copiamos pegamos 7 copias, los colocamos a la derecha de cada visor ordenadamente ante el visor 0 el boton comVisor(0) y ComVisor(1)...etc
Código: Visual Basic
  1.  
  2. Private Sub ComVisor_Click(Index As Integer)
  3.      dim s as string
  4.  
  5.      Select case Index
  6.          Case 0                              ' poner operando1 a 0
  7.                 txtVisor(0).Text ="0"
  8.          Case 1                            ' poner operando1 en operando2
  9.                 txtVisor(2).Text =txtVisor(0).Text
  10.          Case  2                             ' poner ambos operandos a 0
  11.                 txtVisor(0).Text ="0"
  12.                 txtVisor(2).Text ="0"
  13.          Case 3                            ' intercambiar operandos
  14.                s =txtVisor(0).Text
  15.                 txtVisor(0).Text =txtVisor(2).Text
  16.                 txtVisor(2).Text = s
  17.          Case 4                              ' poner operando2 a 0
  18.                 txtVisor(2).Text ="0"
  19.          Case 5                              ' poner operando2 en operando1
  20.                 txtVisor(0).Text =txtVisor(2).Text
  21.          Case 6                              ' poner resultado en operando1
  22.                 txtVisor(0).Text = txtVisor(3).Text
  23.          Case 7                              ' poner resultado en operando2
  24.                 txtVisor(2).Text = txtVisor(3).Text
  25.      end Select
  26.  
  27.      txtVisor(3).forecolor= Naranja
  28. end sub
  29.  
  30.  

El código de los controles option es también muy sencillo (recuerda que estos 2 controles tienen el mismo índice que el visor al que representan, es decir 0 y 2 y están a su izquierda o donde tu prefieras encajarlos pero que se intuya:
Código: Visual Basic
  1.  
  2. Private Sub OptOperando_Click(Index As Integer)
  3.     OperandoActivo = Index  ' declara la variable operandoActivo a nivel del formulario  como byte
  4.   ' cuando se carga el formulario el valor es 0, no está de más en el load añadir esta línea:
  5. '     en el load:  call  OptOperando_Click(0)
  6. End Sub
  7.  
  8.  

Sólo queda darle vistosidad a los visores, tal como se hizo en el apartado anterior con el visor, se deben preparar ahora los 4 visores, poner el papel (fondo) en negro, y la tinta ( el texto ) en verde... controlar los tamaños que han de tener, etc...
Por último tenemos que bloquear los controles de visor, para que el usuario sólo pueda introducir valores a través de los botones... si se quiere manejar las teclas deberás manejar el contenido de cada visor en el evento validate de cada uno de ellos, para ti que eres principante quizás sea mejor resolverlo sin  preocuparte del manejo del teclado, cuando adquieras más conocimientos ya modificarás el proyecto para añadir esa funcionalidad.... por tanto
por tanto en el load añade este bucle

Código: Visual Basic
  1.  
  2. dim k as byte
  3.     For k= 0 to 3
  4.          txtVisor(k).locked=true
  5.     next
  6.  
  7.  

Saludos....
«Ma non troppo»
----> ModoVacaciones = False<----

vmjmb1

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Calculadora Cientifica
« Respuesta #3 en: Domingo 27 de Septiembre de 2009, 20:07 »
0
wow a eso le llamo ayuda man muchas gracias por la guia voy a intentar hacerla aunque como te dije soy demasiado principiante y mi unico profe a sido el youtube que dicho sea de paso no enseña nada sino solo a hacer proyectos pero no lo explican como lo has explicado tu voy a intentar traducir todo lo que has hecho a mi idioma y cuando termine el proyecto te lo voy a pasar para que me termines de dar una ayuda .... si es que puedes.

salu2

Jimbenit

  • Miembro MUY activo
  • ***
  • Mensajes: 269
  • Nacionalidad: co
    • Ver Perfil
    • http://ingenieriacivil.foroactivo.com
Re: Calculadora Cientifica
« Respuesta #4 en: Viernes 2 de Octubre de 2009, 00:17 »
0
Cita de: "vmjmb1"
...que como recien estoy empezando no se como se hace y por mas que busco en internet no encuentro alguna solucion para mi problema.
Es que no buscaste bien...

lee lo siguiente:
http://www.scribd.com/doc/467647/Capitulo-1-Visual-Basic
http://www.scribd.com/doc/467677/Capitulo-2-Visual-Basic
http://www.scribd.com/doc/467701/Capitulo-3-Visual-Basic
http://www.scribd.com/doc/467708/Capitulo-4-Visual-Basic
http://www.scribd.com/doc/481048/Capitulo-5-Visual-Basic

....
Hay mas capitulos... pero creo que hasta aqui quedaras bien para que realices tu proyecto.
saludos.


Yo quiero mucho a Toph ---> Mi Web]http://ingenieriacivil.foroactivo.com[/url]