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()

    On Error GoTo Error:

    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

    End If

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.