Programación General > Visual Basic para principiantes

 Calculadora Cientifica

(1/1)

vmjmb1:
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:
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 ---Linea 1 operando 1linea 2 operación que se quiere aplicarlinea 3 operando 2linea 4 resultado, entre la línea 3 y la 4 pones una rayita (control line, por ejemplo) 

... 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 --- Private Sub ComCifras_Click(Index As Integer)    If paso Mod 2 = 0 Then ' si el paso es par (osea 0,2,4)        If paso = 2 Then            paso = 3        Else            paso = 1        End If        Text1.Text = "" ' se van a escribir cifras, borramos lo que halla    End If    ' está introduciendo valores numéricos    Text1.Text = Text1.Text & CStr(Index)End Sub  
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 --- Private Sub ComOperacion_Click(Index As Integer)    Dim t1 As Single  ' para hacer una breve pausa si procede            If Index = 1 Then ' operación de resetear la operación en curso (típicamente llamada Clear)        paso = 1        operando1 = 0        operando2 = 0        Operacion = 0        Text1.Text = ""    Else        If paso = 1 Or paso = 3 Then            If paso = 1 Then                operando1 = Val(Text1.Text)                Text1.Text = ComOperacion(Index).Caption                paso = 2                Operacion = Index            Else                  ' recogemos el operando 2 y calculamos                Operando2 = Val(Text1.Text)                Text1.Text = Calcular                                ' el resultado se toma como operand1, salvo que se borre.                Operando1 = Val(Text1.Text)                Paso = 2                                Me.Enabled = False                Text1.ForeColor = vbRed                ' proporcionamos una espera de 3 segundos para ver el resultado                t1 = Timer                Do                    DoEvents                Loop While (Timer - t1) < 2                                If Index <> 0 Then ' miramos que operación se ha elegido                    Text1.Text = ComOperacion(Index).Caption ' después de la pausa colocamos el nuevo operador en el visor                    Operacion = Index                End If                Text1.ForeColor = vbGreen                Me.Enabled = True            End If        Else            Operacion = Index            Text1.Text = ComOperacion(Index).Caption        End If    End IfEnd Sub  
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 --- Private Function Calcular() As String    Dim resul As Double, k as byte        Select Case Operacion        Case 2 ' sumar            Calcular = CStr(operando1 + operando2)        Case 3 ' Restar            Calcular = CStr(operando1 - operando2)        Case 4 ' Multiplica            Calcular = CStr(operando1 * operando2)        Case 5 ' Dividir            If operando2 <> 0 Then                Calcular = CStr(operando1 / operando2)            Else                Calcular = "División por 0 - Error"            End If        Case 6 ' potencias            resul = operando1            For k = 1 To operando2                resul = resul * operando1            Next            Calcular = CStr(resul)'            ' si no quieres calcular con el bucle'            Calcular = CStr(operando1 ^ operando2)        Case 7 ' raíces            Calcular = CStr(operando1 ^ (1 / operando2))        Case 8 '''''            ' otros cálculos.....    End SelectEnd Function  
Finalmente para que quede todo bien le damos vistosidad al visor.... No se si tendrás la fuente llamada LCDD


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

Nebire:
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)
--- Fin de la cita ---
.

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 --- private const Naranja= rgb(255,128,64)  ' naranja Private Sub ComCifras_Click(Index As Integer)     ' está introduciendo valores numéricos , se añaden por la derecha como se escriben los números...        TxtVisor(OperandoActivo).Text = TxtVisor(OperandoActivo).Text & CStr(Index)    txtVisor(3).forecolor= NaranjaEnd Sub  
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 --- Private Sub ComOperacion_Click(Index As Integer)        if index > 1 then            TxtVisor(1).Text = ComOperacion(Index).Caption            txtVisor(3).forecolor= Naranja            Operacion=index        else  ' boton reset o boton de calcular ('=')            If index=0 then                  txtVisor(3).Text = Calcular                  txtVisor(3).forecolor= vbgreen      ' sólo en este caso y en este momento, el visor de resultado es verde            else    ' aquí hacemos como en el apartado anterior todo a 0                  txtVisor(0).Text = "0"                  txtVisor(1).Text = ""                  txtVisor(2).Text = "0"                  txtVisor(3).Text  = ""             End If         end if   end sub  
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 --- Private Function Calcular() As String    Dim resul As Double, k as byte        operando1 = Val(txtVisor(0).Text )    operando2 = Val(txtVisor(2).Text )     Select Case Operacion        Case 2 ' sumar            Calcular = CStr(operando1 + operando2)        Case 3 ' Restar            Calcular = CStr(operando1 - operando2)        Case 4 ' Multiplica            Calcular = CStr(operando1 * operando2)        Case 5 ' Dividir            If operando2 <> 0 Then                Calcular = CStr(operando1 / operando2)            Else                Calcular = "División por 0 - Error"            End If        Case 6 ' potencias            resul = operando1            For k = 1 To operando2                resul = resul * operando1            Next            Calcular = CStr(resul)'            ' si no quieres calcular con el bucle'            Calcular = CStr(operando1 ^ operando2)        Case 7 ' raíces            Calcular = CStr(operando1 ^ (1 / operando2))        Case 8 '''''            ' otros cálculos.....    End SelectEnd Function  
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 --- Private Sub ComVisor_Click(Index As Integer)     dim s as string      Select case Index         Case 0                              ' poner operando1 a 0                txtVisor(0).Text ="0"         Case 1                            ' poner operando1 en operando2                txtVisor(2).Text =txtVisor(0).Text          Case  2                             ' poner ambos operandos a 0                txtVisor(0).Text ="0"                txtVisor(2).Text ="0"         Case 3                            ' intercambiar operandos               s =txtVisor(0).Text                 txtVisor(0).Text =txtVisor(2).Text                 txtVisor(2).Text = s         Case 4                              ' poner operando2 a 0                txtVisor(2).Text ="0"         Case 5                              ' poner operando2 en operando1                txtVisor(0).Text =txtVisor(2).Text          Case 6                              ' poner resultado en operando1                txtVisor(0).Text = txtVisor(3).Text          Case 7                              ' poner resultado en operando2                txtVisor(2).Text = txtVisor(3).Text      end Select      txtVisor(3).forecolor= Naranjaend sub  
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 --- Private Sub OptOperando_Click(Index As Integer)    OperandoActivo = Index  ' declara la variable operandoActivo a nivel del formulario  como byte   ' cuando se carga el formulario el valor es 0, no está de más en el load añadir esta línea:'     en el load:  call  OptOperando_Click(0)End Sub  
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 --- dim k as byte    For k= 0 to 3         txtVisor(k).locked=true    next  
Saludos....

vmjmb1:
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:

--- 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.
--- Fin de la cita ---
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.

Navegación

[0] Índice de Mensajes

Ir a la versión completa