Práctica 4: Funciones.

1.- Crear un nuevo proyecto
(EXE estándar) que incluya un formulario. Los nombres que tenemos que dar a los
ficheros y atributos Name del proyecto y formulario son respectivamente
Multiply.vbp, Multiply, Multiply.frm y frmMultiply.
El objetivo del programa es el hacer una simple calculadora que nos permita la realización de multiplicaciones de números de dos dígitos y el factorial de un número también de dos dígitos.
2.- Colocar los objetos siguientes
y asignar los valores adecuados a sus atributos (propiedades).
|
Objeto |
Propiedad |
Valor |
|
Form |
Name |
frmOptions |
|
|
Caption |
Funciones |
|
CommandButton |
Name |
cmdMultiplicar |
|
|
Caption |
&Multiplicar |
|
CommandButton |
Name |
cmdFactorial |
|
|
Caption |
&Factorial |
|
CommandButton |
Name |
cmdBorrar |
|
|
Caption |
&Borrar |
|
CommandButton |
Name |
cmdSalir |
|
|
Caption |
&Salir |
|
Label |
Name |
LblMultiplicar |
|
|
Caption |
Multiplicar |
|
Label |
Name |
LblX |
|
|
Caption |
X |
|
Label |
Name |
LblIGMult |
|
|
Caption |
= |
|
Label |
Name |
LblFactorial |
|
|
Caption |
Factorial |
|
Label |
Name |
LblIGFact |
|
|
Caption |
= |
|
TextBox |
Name |
TxtOp1Mult |
|
|
Enabled |
True |
|
|
Text |
0 |
|
|
MaxLength |
2 |
|
TextBox |
Name |
TxtOp2Mult |
|
|
Enabled |
True |
|
|
Text |
0 |
|
|
MaxLength |
2 |
|
TextBox |
Name |
TxtResMult |
|
|
Enabled |
False |
|
|
Text |
0 |
|
|
MaxLength |
0 |
|
TextBox |
Name |
TxtOp1Fact |
|
|
Enabled |
True |
|
|
Text |
0 |
|
|
MaxLength |
2 |
|
TextBox |
Name |
TxtResFact |
|
|
Enabled |
False |
|
|
Text |
1 |
|
|
MaxLength |
0 |
Nuevas propiedades de los
TextBox:
Enabled: El valor
por defecto es True. Si el valor es False el objeto está deshabilitado y no
puede recibir el Focus, por tanto no puede recibir eventos del usuario,
en este caso su aspecto físico se vé ligeramente alterado.
Locked: El valor
por defecto es False. Si el valor es True el objeto se encuentra bloqueado, no
permitiendo al usuario modificar el valor de la propiedad Text desde
teclado..
MaxLength: El valor
por defecto es 0, indicando que la cantidad de caracteres que pueden aparecer
en el TextBox, en un principio, es ilimitada. Cualquier otro valor
indica la cantidad de caracteres que se permiten para dicho objeto.
3.- Codifica el trigger
correspondiente al evento Click del botón cmdSalir.
4.- Codifica el trigger
correspondiente al evento Click del botón de multiplicar cmdMultiplicar,
como los valores que devuelve la propiedad Text de los TextBox es del tipo
String se debe realizar una conversión de tipos de variables de String a
Integer.
Integer Int(String): La
función Int nos retorna el Integer correspondiente a la cadena de caracteres
que se le ha pasado como parámetro. Se produce un error en el caso de que esta
cadena de caracteres no corresponda con un Integer.
El control de errores se realiza con una serie de
sentencias destinada a tratar los errores y así poder dar más robustez al
software realizado. Estas sentencias se encuentran detalladas en el Apéndice
A del curso ‘Detección y manipulación de errores’.
Se ha creado una función que
realiza la multiplicación de dos números ‘Function Multiplicar(Op1 As Integer,
Op2 As Integer) As Integer’. La creación de subrutinas y funciones se encuentra
detallada en el Apéndice B del curso ‘Subrutinas y funciones’.
Private Sub cmdMultiplicar_Click()
Dim
iResultMult As Integer
iResultMult =
Multiplicar(Int(txtOp1Multiplicar.Text), Int(txtOp2Multiplicar.Text))
txtResultMultiplicar.Text =
Str(iResultMult)
Exit Sub
Error:
MsgBox "El Formato de algún campo no se corresponde con un
número"
cmdBorrar_Click
txtOp1Multiplicar.SetFocus
End Sub
Private Function Multiplicar(Op1 As Integer, Op2 As Integer) As Integer
Multiplicar
= Op1 * Op2
End Function
5.- Codificar el evento Click del
botón cmdFactorial. Para ello se ha de crear una función llamada Factorial que
se le pasará como parámetro un Integer y retornará un Double que representa el
valor del factorial.
En el Apéndice C se detallan los tipos y ámbito de estas variables. En este caso se utiliza un tipo de variable Double para la función Factorial, ya que el resultado del factorial el valor máximo de un número de dos dígitos (99) excede los márgenes de los Integer (16 bits).
Private
Sub cmdFactorial_Click()
On Error GoTo Error:
If
(Int(txtOpFactorial.Text) >= 0) Then
txtResultFactorial.Text =
Str(Factorial(Int(txtOpFactorial)))
Exit Sub
Error:
MsgBox "El Formato de algún campo no se corresponde con un
número válido"
cmdBorrar_Click
txtOpFactorial.SetFocus
End Sub
Private Function Factorial(iNum As Integer) As Double
Dim iResult As Double
iResult = 1
If (iNum > 1) Then
iResult = Factorial(iNum
- 1) * iNum
End If
Factorial = iResult
End Function
6.- Codifica el trigger del evento
Click del objeto cmdBorrar de tal forma que aparezca un string en blanco
en todos los TextBox de la aplicación.
7.- Ejecutar el programa y generar
un ejecutable.
a) No
permitir el cambio de tamaño del formulario (para ello utilizar las propiedades
del formulario)
b) Realiza la
función Factorial utilizando un bucle Do While...Loop.
c) Realiza la
función Factorial utilizando un bucle Do...Loop While.
d) Realiza la
función Factorial utilizando un bucle For...Next.
Realiza un
ejercicio que incorpore las funciones suma, resta y división a las ya
implementadas en el ejercicio de la práctica.
NOTA: VB nos
permite omitir la declaración de variables y/o sus tipos, pero esa una práctica
poco recomendada en programación. Para no permitir esta opción se ha introducir
el código ‘Option Explicit’ al inicio del programa.
Apéndice A. Detección
y manipulación de errores.
Una de las principales tareas de la implementación de una aplicación es la del control de errores. El número de errores que se pueden cometer en una aplicación aumenta exponencialmente respecto a la cantidad de líneas de código de la misma. Una aplicación con un buen control de errores es más robusta que una que no lo tenga, puesto que es capaz de tratarlos de una manera elegante. Existen mecanismos en casi todos los lenguajes de programación que permiten realizar la tarea de depuración de errores en la fase de evaluación de la aplicación escrita.
Existen tres tipos de errores:
Errores de sintaxis.- Son el resultado de escribir incorrectamente una sentencia en VB.
Generalmente, estos errores se producen por fallos de mecanografiado al escribir el código de algún procedimiento o por no conocer con exactitud la sintaxis del lenguaje, y tiene como característica principal el hecho de que si no se resuelve, no se puede ejecutar la aplicación, puesto que el interprete de VB no sabe qué queremos decirle en ese fragmento de código. Por esta razón se detectan en tiempo de diseño. En cuanto a la corrección de estos errores, suele resultar muy sencilla, pues se marca automáticamente con otro color en la pantalla.
Podemos conseguir que el entorno de desarrollo de VB nos avise automáticamente de los errores sintácticos que cometemos al escribir el código. Para ello, tenemos que activar la opción ‘Auto Sintax Check’ (que se encuentra en la orden ‘Options’ del menú ‘Tools’, haciendo clic en la pestaña ‘Editor’).
Errores durante la ejecución.- Ocurren cuando, al ejecutar una aplicación, una sentencia intenta una operación que es imposible de realizar (p.ej.: una división entre cero).
Errores lógicos.- Se producen cuando, siendo la aplicación sintácticamente correcta, se ejecuta correctamente pero no se obtienen los resultados esperados (son los más difíciles de corregir).
Manipulación de errores de ejecución:
Debemos evitar que este tipo de error se produzca, o en su defecto, permitir que la aplicación continúe de una forma elegante. Para ello contamos con una serie de sentencias de manipulación de errores, que son las siguientes...
·
On Error GoTo etiqueta
Se suele colocar justo delante de la instrucción conflictiva, o al principio del procedimiento, para activar así la manipulación de errores para toda la aplicación. Su misión es la de saltar a la ‘rutina de tratamiento de error’ que se encuentra en la zona delimitada por la etiqueta.
·
Exit
Sub, Exit Function, Exit Property
Se utiliza para salir de la ‘rutina de tratamiento de errror’, de tal forma que se sale del procedimiento, función o propiedad en el que nos encontramos.
·
Resume
[Next | etiqueta]
Con esta sentencia se vuelve a:
1. Resume.- Instrucción donde se ha producido el error.
2. Resume Next.- Instrucción siguiente a la del error.
3. Resume etiqueta.- Instrucción señalada por la etiqueta especificada.
P.ej.:
Private Sub cmdDiv_Click()
On
Error GoTo Div_por_Cero
Resul
= Divid / Divis
Cociente.Text = Resul
Exit Sub
Div_por_Cero:
MsgBox “El divisor no debe ser cero”, 16, “Div0”
End Sub
Objetos de manipulación de errores:
·
Err
Toda la información relativa a un error está encapsulada en el objeto Err.
En una aplicación en ejecución solo existe un objeto Err, que almacenará la información relativa al último error que se haya producido.
Las propiedades más comunes del objeto Err son las siguientes:
· Description.- Contiene la descripción textual del error.
· Number.- Contiene el número correspondiente al error.
· Source.- Contiene el nombre del objeto o aplicación que ha generado el error.
En cuanto a los métodos principales de este objeto, tenemos:
· Clear.- Inicializa las propiedades a cero (cero o nulo).
· Raise.- Genera el error cuyo número se pasa como parámetro.
Las propiedades del objeto Err
se inicializan automáticamente tras ejecutarse alguna de las sentencias Resume.
On Error, Exit Sub,
Exit Function o Exit Property.
·
Error(n)
Genera el error número n
especificado. Equivale a Err.Raise(n).
Apéndice B. Subrutinas y funciones.
Apéndice C. Variables, Tipos y Ambitos.
Apéndice D. Convenciones de denominaciones.
Apéndice E. Instrucciones
para la toma de decisiones.
En este apéndice se muestra un resumen de la sintaxis de las instrucciones más relevantes de VB para la toma de decisiones. Pretende ser una guía rápida de acceso a dichas instrucciones. Se supone que el alumno ya está familiarizado con las mismas en otros lenguajes o a nivel de algorítmica.
·
La instrucción If
If condición Then
‘ Este es el código que se ejecuta si la condición es cierta.
End If
If condición Then
‘ Este es el código que se ejecuta si la condición es cierta.
Else
‘ Este es el código que se ejecuta si la condición es falsa.
End If
·
La instrucción Select Case
Select Case valor
Case
0:
‘Este es el código que se ejecuta si valor = 0.
Case 1:
‘Este es el código que se ejecuta si valor = 1.
...
Case
Else:
‘Este es el código que se ejecuta si valor es diferente
‘a todos los anteriores case.
End Select
·
El
bucle Do While…Loop
Do While condición
‘Ejecuta este código repetidamente hasta que la condición sea falsa.
Loop
·
El
bucle Do…Loop While
Do
‘Ejecuta este código repetidamente hasta que la condición sea falsa.
Loop While condición
·
El
bucle For…Next
For contador = ValorInicio To
ValorFin [Step step]
‘Ejecuta este código repetidamente hasta que
contador llegue a ‘ValorFin con incrementos de sep.
Next
Apéndice F. Funciones y constantes genéricas de VB.
InputBox (pag. 466 del libro IBM)
Str
Int
Apéndice G.