You are on page 1of 5

Dorantes Jiménez José Enrique

N° de control: 15321051

Reporte de práctica N° 1: Calculadora


-Introducción
En este reporte se explicará la primer práctica que se hizo para la materia: Tópicos avanzados de programación, esta práctica fue realizada en el
programa Visual Studio 2010, siendo esta la primera actividad para dar el primer paso a futuras programaciones en este lenguaje, en cierto punto
llegó a ser difícil la comprensión del documento para realizar la práctica ya que por una parte se presenta el código de programación de la
calculadora y por otro el código de diseño que generan automáticamente los elementos.

-Análisis

Objeto Propiedad Valor


Etiqueta. (Name) etPantalla
pantalla autoSize False
BorderStyle Fixed3D
BackColor [240, 248, 255]
Font Comic Sans MS, 15pt, style=Italic
TextAlign MiddleRight
Text 0,
Botón de Pulsación. (Name) btDigiton (n: 0 a 9)
Teclas 0 a 9 Text 0, 1, 2,…, 9
Botón de pulsación. (Name) btMas
Tecla + Text +
Botón de pulsación. (Name) btMenos
Tecla - Text -
Botón de pulsación. (Name) btPor
Tecla x Text x
Botón de pulsación. (Name) btDividir
Tecla / Text /
Botón de pulsación. (Name) btIgual
Tecla = Text =
Botón de pulsación. (Name) btComaDec
Coma Decimal Text ,
Botón de pulsación. (Name) btTantoPorCiento
Tanto por ciento Text %
Botón de pulsación. (Name) btIniciar
Puesto a cero total Text C
Botón de pulsación. (Name) btBorrarEntrada
Puesta a cero última entrada Text CE

-Desarrollo
1.- Seleccionaremos los botones del 0 al 9 y en la misma ventana donde se colocan las propiedades de cada elemento hay un símbolo en forma
de rayo, ese es la ventana “eventos” nos dirigimos al evento “click” y les daremos esta propiedad: btDigito_Click, de esta forma a todos los
botones seleccionados se les aplicará esta propiedad de evento, y automáticamente nos arrojará a la pestaña para ingresar el código, que es el
siguiente:
Private Sub btDigito_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btDigito9.Click,
btDigito8.Click, btDigito7.Click, btDigito6.Click, btDigito5.Click, btDigito4.Click, btDigito3.Click,
btDigito2.Click, btDigito1.Click, btDigito0.Click
Dim objButton As Button = CType(sender, Button)
If (ultimaEntrada <> Entrada.DIGITO) Then
If (objButton.Text = "0") Then Return
etPantalla.Text = ""
ultimaEntrada = Entrada.DIGITO
comaDecimal = False
End If
etPantalla.Text += objButton.Text
End Sub
Dorantes Jiménez José Enrique
N° de control: 15321051

2.- Si el programa se corre tal cual, nos arrojará muchos errores, y eso es porque debemos declarar variables miembro en la clase “Form1” y el
código es el siguiente:

Private Enum Entrada


NINGUNA
DIGITO
OPERADOR
CE
End Enum
Private ultimaEntrada As Entrada
Private comaDecimal As Boolean
Private operador As Char
Private numOperandos As Byte
Private operando1 As Double
Private operando2 As Double

Si se introduce un operador después de otro, por defecto el programa solo detectará el último operando, para eso declaramos las variables
numOperandos, que valdrá 1 cuando se haya introducido el primer operando, y 2 cuando se haya introducido el segundo operando,
operando1 y operando2 como miembros de la clase Form1

3.- A continuación en el formulario, selecionamos el botón de coma decimal, y de igual forma que en el paso 1, nos vamos a la ventana de
eventos y en el campo “Click” le daremos esta propiedad: btComaDec_Click, para que cuando nos arroje a la pestaña del código ingresemos lo
siguiente:

Private Sub btComaDec_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btComaDec.Click


If (ultimaEntrada <> Entrada.DIGITO) Then
etPantalla.Text = "0,"
ultimaEntrada = Entrada.DIGITO
ElseIf (comaDecimal = False) Then
etPantalla.Text = etPantalla.Text + "."
End If
comaDecimal = True
End Sub
4.- Para que se puedan usar los operadores, primero se seleccionan los botones: +, -, x, / y =, haciendo lo mismo que en el paso anterior, solo
que en el evento “click” se colocará esta propiedad: btOperacion_Click, para entonces la calculadora tendrá que recordar el operador
introducido, para ello utilizará, la variable operador de tipo char (esta fue anteriormente declarada en la clase Form1) el código a introducir en
este método es el siguiente:
Private Sub btOperacion_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btPor.Click,
btMenos.Click, btMas.Click, btIgual.Click, btDividir.Click
Dim objButton As Button = CType(sender, Button)
Dim textoBoton As String = objButton.Text
If ((numOperandos = 0) And (textoBoton(0) = "="c)) Then
ultimaEntrada = Entrada.DIGITO
End If

If (ultimaEntrada = Entrada.DIGITO) Then


numOperandos += 1
End If
If (numOperandos = 1) Then
operando1 = Double.Parse(etPantalla.Text)
ElseIf (numOperandos = 2) Then
operando2 = Double.Parse(etPantalla.Text)
Select Case (operador)
Case "+"c : operando1 += operando2
Case "-"c : operando1 -= operando2
Case "x"c : operando1 *= operando2
Case "/"c : operando1 /= operando2
Case "="c : operando1 = operando2
End Select
etPantalla.Text = operando1.ToString()
numOperandos = 1
End If
operador = textoBoton(0)
ultimaEntrada = Entrada.OPERADOR
End Sub
El usuario introducirá un nuevo número. Para presentar en pantalla el nuevo número, esta tiene que ser iniciada. Para enterarnos de este
detalle, después de clickear en uno de los operadores haremos que la variable ultimaEntrada tome el valor OPERADOR, tal que así
Dorantes Jiménez José Enrique
N° de control: 15321051

5.- Seguimos con el botón %, para ello lo seleccionaremos y lo asociaremos a un evento, este se llamará: btTantoPorCiento_Click, y en el método
al que nos arroja escribimos el siguiente código:
Private Sub btTantoPorCiento_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btTantoPorCiento.Click
Dim resultado As Double
If (ultimaEntrada = Entrada.DIGITO) Then
resultado = operando1 * Double.Parse(etPantalla.Text) / 100
etPantalla.Text = resultado.ToString
btIgual.PerformClick()
btTantoPorCiento.Focus()
End If
End Sub

6.-Al pulsar el botón C significa que se quiere iniciar la calculadora. Entonces, lo que tiene que suceder es que en la pantalla aparezca “0,”. Para
ello seleccionaremos el botón C y le asociaremos un manejador de evento, este llevará por nombre: btIniciar_Click, colocando el siguiente
código:

Private Sub btIniciar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btIniciar.Click


etPantalla.Text = "0,"
ultimaEntrada = Entrada.NINGUNA
comaDecimal = False
operador = Convert.ToChar(0)
numOperandos = 0
operando1 = 0
operando2 = 0
End Sub

7.- Para finalizar, el botón CE sirve para borrar el último número ingresado, entonces tendremos que seleccionar el botón CE y lo asociaremos a
un manejador de eventos, el cual llevará por nombre: btBorrarEntrada_Click, cuando nos mande a la pestaña de código en su respectivo
método, escribiremos el siguiente código:

Private Sub btBorrarEntrada_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles


btBorrarEntrada.Click
etPantalla.Text = "0,"
ultimaEntrada = Entrada.CE
comaDecimal = False
End Sub

-Análisis de pruebas y resultados


Para probar que funciona el código, realizaremos la operación -3.45*2.6, el cual nos tiene que dar como resultado: 8.97

Ahora probaremos el botón %, ingresaremos 55 y le restaremos su 46%, nos dará de resultado: 29.7
Dorantes Jiménez José Enrique
N° de control: 15321051

-Conclusión
Como se dijo en la introducción, el archivo del que se obtuvieron las instrucciones estuvo un tanto difíl de entender, ya que combinaba el código
principal con el código de diseño, y en ocaciones presentaba de forma salteada la información, pero esto me sirvió para comenzar a usar este
nuevo lenguaje, aunque no abarcó todos los métodos y que este era un programa sencillo.

-Bibliografía
Archivo “05-Aplicacion_calculadora_vb.pdf” de la carpeta “unidad 1” de la materia “Tópicos avanzados de programación”

-Anexo de código
Public Class Form1
Private Enum Entrada
NINGUNA
DIGITO
OPERADOR
CE
End Enum
Private ultimaEntrada As Entrada
Private comaDecimal As Boolean
Private operador As Char
Private numOperandos As Byte
Private operando1 As Double
Private operando2 As Double
Private Sub btDigito_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btDigito9.Click, btDigito8.Click, btDigito7.Click, btDigito6.Click, btDigito5.Click, btDigito4.Click,
btDigito3.Click, btDigito2.Click, btDigito1.Click, btDigito0.Click
Dim objButton As Button = CType(sender, Button)
If (ultimaEntrada <> Entrada.DIGITO) Then
If (objButton.Text = "0") Then Return
etPantalla.Text = ""
ultimaEntrada = Entrada.DIGITO
comaDecimal = False
End If
etPantalla.Text += objButton.Text
End Sub

Private Sub btComaDec_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles


btComaDec.Click
If (ultimaEntrada <> Entrada.DIGITO) Then
etPantalla.Text = "0,"
ultimaEntrada = Entrada.DIGITO
ElseIf (comaDecimal = False) Then
etPantalla.Text = etPantalla.Text + "."
End If
comaDecimal = True
End Sub

Private Sub btOperacion_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles


btPor.Click, btMenos.Click, btMas.Click, btIgual.Click, btDividir.Click
Dim objButton As Button = CType(sender, Button)
Dim textoBoton As String = objButton.Text
If ((numOperandos = 0) And (textoBoton(0) = "="c)) Then
ultimaEntrada = Entrada.DIGITO
End If

If (ultimaEntrada = Entrada.DIGITO) Then


numOperandos += 1
End If
If (numOperandos = 1) Then
operando1 = Double.Parse(etPantalla.Text)
ElseIf (numOperandos = 2) Then
operando2 = Double.Parse(etPantalla.Text)
Select Case (operador)
Case "+"c : operando1 += operando2
Dorantes Jiménez José Enrique
N° de control: 15321051

Case "-"c : operando1 -= operando2


Case "x"c : operando1 *= operando2
Case "/"c : operando1 /= operando2
Case "="c : operando1 = operando2
End Select
etPantalla.Text = operando1.ToString()
numOperandos = 1
End If
operador = textoBoton(0)
ultimaEntrada = Entrada.OPERADOR
End Sub

Private Sub btTantoPorCiento_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles


btTantoPorCiento.Click
Dim resultado As Double
If (ultimaEntrada = Entrada.DIGITO) Then
resultado = operando1 * Double.Parse(etPantalla.Text) / 100
etPantalla.Text = resultado.ToString
btIgual.PerformClick()
btTantoPorCiento.Focus()
End If
End Sub

Private Sub btIniciar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles


btIniciar.Click
etPantalla.Text = "0,"
ultimaEntrada = Entrada.NINGUNA
comaDecimal = False
operador = Convert.ToChar(0)
numOperandos = 0
operando1 = 0
operando2 = 0
End Sub

Private Sub btBorrarEntrada_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles


btBorrarEntrada.Click
etPantalla.Text = "0,"
ultimaEntrada = Entrada.CE
comaDecimal = False
End Sub
End Class