Texto completo

(1)

UNIDAD 6 Funciones.

PROFESORA: L.I. Talia Téllez Bolaños

HERNANDEZ FLORES JUAN MANUEL 10210084

ALGORITMOS Y LENGUAJES DE PROGRAMACION

SEMESTRE: 4

GRUPO: A

(2)

En esta cuarta sección del tutorial básico se ven las subrutinas de código, procedimientos y funciones

1 - Subrutinas y procedimientos

1.2 - Pasar parámetros a los procedimientos

1.3 - Pasar parámetros por valor y por referencia ( ByVal y ByRef )1.4 - Ejemplo de envío de parámetros por valor ( ByVal )

1.5 - Ejemplo de envío de parámetros por Referencia ( ByRef )2 - Las Funciones en visual basic

1 - Subrutinas de código

Se denomina subrutina a una porción de código que tiene como principal función ejecutar una determinada tarea. Estas tienen un nombre para poder identificarlas y luego poder llamarlas para poder utilizarlas.

Las subrutinas tienen un principio y un fin y estas pueden tener distinto tipo de alcance, o sea pueden ser de tipo privadas o públicas.

En el siguiente ejemplo se muestra una subrutina que crea visual basic automáticamente cuando en un formulario insertamos un botón llamado Command1 y desde la ventana de eventos seleccionamos el evento click del mismo

Private Sub Command1_Click()

End Sub

(3)

Private Sub TextPedidos_Change()

End Sub

En estos 2 últimos ejemplos tenemos una subrutina o procedimiento de tipo Privado, esto quiere decir que la podemos utilizar solo en el formulario o módulo donde está declarada o escrita

La palabra sub le sigue el nombre de la rutina que la identifica. En este caso Command1_click() y en el otro ejemplo TxtPedidos_Change().

Si quisiéramos que estos procedimientos se puedan llamar desde otro formulario, lo que tendríamos que hacer es cambiar el alcance del procedimiento, en ves de Private Sub cambiarlo por Public Sub. si hacemos esto, ese procedimiento de código puede ser utilizado desde cualquier parte del proyecto.

Subrutinas y Procedimientos propios

También podemos crear nuestros propios Procedimientos y Subrutinas de código para ejecutar una determinada tarea.

Para crear un procedimiento de código se debe escribir la palabra Private sub o Public sub (depende el alcance), seguida del nombre del procedimiento (un nombre que queramos) y los parámetros, si es que le enviaremos parámetros (los parámetros son opcionales). Además el procedimiento debe ser escrito en un lugar vacío de la ventana de código, es decir nno se puede crear un procedimiento dentro de otro

Un ejemplo para crear un procedimiento:

Private Sub ProcedimientoBorrar()

label1 = "" label2 = "" label3 = ""

(4)

En este ejemplo creamos un procedimiento muy simple que tendrá la función específica de borrar el contenido de 3 controles label.

¿ Pero ahora te preguntarás como hago para que se ejecute el procedimiento que he creado ?.

Muy fácil. Solo debemos escribir el nombre del procedimiento en el lugar donde queremos que se ejecute. Por ejemplo supongamos que tenemos un formulario con 3 controles Label (Label1, Label2 y Label3), También un Commandbutton llamado Command1 y en la ventana de código hemos escrito el procedimiento del ejemplo anterior. Si nosotros queremos llamar al procedimiento, que borrará el contenido de los label cuando hagamos click en el Command1 lo haríamos así:

Private Sub command1_click()

ProcedimientoBorrar

End Sub

Al presionar el Command1 visual basic detectaría el nombre ProcedimientoBorrar, y automáticamente saltaría al lugar donde creamos el procedimiento y ejecutaría las líneas de código que haya en ese procedimiento.

También podemos llamar a un procedimiento utilizando la palabra Call, que quiere decir llamar, seguida del nombre del procedimiento, pero en este caso si utilizamos call y nuestro procedimiento contiene parámetros, debemos pasarlos entre paréntesis ( los parámetros de procedimientos y funciones se explican a continuación)

una vez que se ha terminado de ejecutar las instrucciones que estén dentro del bloque del procedimiento, volvería a la línea siguiente de donde fue llamado el mismo, y ejecutaría todas las líneas restantes de código. En este caso no ejecutaría nada mas por que no hemos puesto ninguna otra instrucción debajo de ProcedimientoBorrar.

(5)

1.1 - Pasar parámetros a los procedimientos:

Se utilizan los parámetros en los procedimientos para que el procedimiento no ejecute siempre las mismas líneas de código y pueda variar, teniendo la posibilidad de hacerlo mas dinámicamente. En ciertas ocaciones no es necesario enviar parámetros, pero en otras es prácticamente fundamental. Los parámetros son datos, casi de cualquier tipo, que se pasan seguido del nombre del procedimiento, y si es mas de uno deben ir separados por comas (,). Ejemplo:

DatosPersonales "Luciano", 25, "La plata"

En este ejemplo pasamos tres parámetros: El primero es un nombre y es un dato de tipo String y por ende debe ir entre comillas. El segundo es un número y el tercero también un string. , o sea una cadena de caracteres

Pero la cosa no queda acá. Si nosotros vamos a pasar parámetros a un procedimiento, cuando creamos el procedimiento debemos establecer que tipo de parámetros va a recibir el mismo. Ejemplo:

Private Sub DatosPersonales(nombre As String, edad As Integer, ciudad As String )

Label1 = nombre Label2 = edad Label3 = ciudad

End Sub

siguiendo, el ejemplo anterior creamos un procedimiento con tres parámetros. Cada parámetro se declara como se hace con las variables, o sea que debemos darles un nombre a la variable y definir el tipo de dato ( sin utilizar la palabra Dim ) que recibirá cuando las llamemos.

(6)

Coloca un Command1 , 3 controles Label, copia en la ventana de código el procedimiento anterior llamado DatosPersonales, y ahora pega el siguiente código

Private sub command1_click()

DatosPersonales "Luciano", 25, "La plata"

End sub

Al presionar el botón se llamará al procedimiento que habíamos creado anteriormente, y le pasará los valores de los parámetros en el orden en que estén establecidos declarados en el procedimiento. Esto quiere decir que el primer parámetro con el valor "Luciano" se almacenará o asignará a la variable nombre , el valor 25 se le asignará a la variable edad y el último valor a la variable ciudad.

Después que las variables ya cargaron el valor las podemos utilizar dentro del procedimiento, como en el ejemplo anterior que le asignamos a un control Label1 el contenido de la variable nombre, al Label2 el contenido de edad y al Label3 el contenido de la variable ciudad.

Es muy importante respetar el orden en que pasamos los parámetros en un procedimiento, por que por ejemplo en el caso anterior si hubiésemos pasado los parámetros de esta forma:

DatosPersonales 25, "Luciano", "La plata"

el segundo parámetro "Luciano" se almacenaría en la variable Edad que es de tipo Integer y se produciría un error en tiempo de ejecución por no coincidir los tipos de datos, ya que la variable espera un valor numérico de tipo Integer y nosotros le estamos pasando una cadena de caracteres, un dato de tipo String

(7)

Private Sub sumar(a As Integer, b As Integer)

Label1 = a + b

End Sub

hasta aquí creamos un procedimiento llamado sumar que recibirá 2 parámetros de tipo Integer, si nosotros llamamos al procedimiento y le pasamos un solo valor, por ejemplo:

Call sumar ( 456 )

Esto daría un error de compilación por que el procedimiento espera recibir 2 parámetros ..y nosotros le estamos pasando o enviando solo uno de ellos.

Precisamente el cartel de error que te mostraría visual basic sería el siguiente:

Nota: hay una sentencia llamada Optional que SI permite pasar parámetros de forma opcional, por ejemplo:

Private Sub Con_Parametro_Opcional(Nombre As String, _ Optional Email As String)

(8)

MsgBox Email

End Sub

Ahora si llamas a la rutina anterior, y omites el parámetro Email, esta no dará error, por ejemplo:

Call Con_Parametro_Opcional("Maria")

Nota: Los parámetros opcionales, si o si deben estar declarados al final de la lista de parámetros, por ejemplo esto no se puede hacer:

Private sub una_Rutina ( Optional Email As String, Nombre as String )

Función IsMissing

Esta función se utiliza cuando utilizamos parámetros opcionales en una función o procedimiento, y nosotros, dentro del mismo queremos saber y averiguar si se han enviado los parámetros opcionales

El uso de IsMissing muy simple. Esta función retorna el valor True si NO se ha enviado el parámetro que queremos comprobar, y devuelve False si el parámetro ha sido enviado:

por ejemplo , colocar dos CommandButton

(9)

' Si IsMissing devuelve Verdadero, es por que no se envíó If IsMissing(Nombre) = True Then

MsgBox " NO Se ha enviado el parámetro NOMBRE ", vbInformation Else

MsgBox " Se ha enviado el parámetro NOMBRE ", vbInformation End If

End Sub

'Acá No se envía el parámetro Private Sub Command1_Click() Mostrar_Dato

End Sub

'Acá Si se envía el parámetro

Private Sub Command2_Click() Mostrar_Dato "María"

End Sub

1.3 - Pasar parámetros por valor y por referencia ( ByVal y ByRef )

los parámetros en las funciones y procedimientos, se pueden enviar de dos maneras: por Valor y por Referencia.

Si están declarados como ByVal, los mismos serán por valor, si se declaran como ByRef serán por referencia.

(10)

procedimiento, solo tendrá efecto dentro del procedimiento o función, una ves que termine y finalice el mismo, la variable original pasará a valer el dato que tenía, es decir no se modifica

En los parámetros enviados por Referencia, lo que se hace es enviar un puntero de la variable original. Entonces, si en la función o procedimiento se cambia el valor de la variable, el cambio seguirá manteniéndose una ves que finalice la ejecución del procedimiento o función.

1.4 - Ejemplo de envío de parámetros por Valor ( ByVal )  

Código de ejemplo

Private Sub Command1_Click()

Dim Un_Valor As Long

Un_Valor = 100

'Se envía la variable por Valor ( ByVal )

Call Sumar(Un_Valor)

'Muestra el valor que es 100, ( no se modificó en la función Sumar )

MsgBox Un_Valor

End Sub

Sub Sumar(ByVal Valor As Long)

'Modifica la variable

Valor = Valor + 100

End Sub

(11)

En el ejemplo anterior hay una Sub llamada Sumar que recibe como parámetro una variable enviada por valor con ByVal ( es decir es una copia de la variable original ). al presionar el Commmand1.

Al  entrar  en  la  Sub  Sumar,   el  dato   se  modifica   (  Valor  =  Valor +  100).   Cuando  finaliza  el procedimiento   Sumar  y  retorna  a la  línea siguiente  de la  llamada  a la  Sub  sumar,  muestra mediante un MsgBox el valor de la misma, en este caso es 100, y NO 200 que es el cambio que tuvo dentro del procedimiento Sumar ( Valor = Valor + 100 ).

Con esto queda visto que en realidad al enviarla como ByVal, se envía una copia de la variable original y cualquier cambio que se produzca, será solo en el ámbito del procedimiento o función

 

1.5 - Ejemplo de envío de parámetros por Referencia ( ByRef )

Este ejemplo es igual que el anterior, pero en la Sub sumar , la variable Valor se declara con ByRef ( por Referencia )

Código

Private Sub Command1_Click()

Dim Un_Valor As Long

Un_Valor = 100

'Se envía la variable por Referencia ( ByRef ) con el valor 100

Call Sumar(Un_Valor)

'Muestra el valor que ahora es 200, ( ya que se modificó en la Sub Sumar)

MsgBox Un_Valor

End Sub

Sub Sumar(ByRef Valor As Long)

'Modifica la variable

Valor = Valor + 100

(12)

 

Al probar el código, ahora el Msgox al mostrar el valor de la variable, es de 200, y NO de 100 como en el ejemplo de ByVal.

Esto demuestra que al enviar la variable como referencia, si la misma se modifica dentro del procedimiento o función, se está modificando la variable REAL, es decir cualquier cambio que se le haga a la misma, se mantendrá, ya que se está modificando la variable Real ( no es una copia )

Nota Importante: cuando no se indica a un parámetro de una función o Rutina ni ByVal, ni ByRef, se asume que la misma se está enviando como referencia (ByRef).

Es decir lo siguiente recibe el parámetro como Referencia

Sub Sumar(Valor As Long)

.. que es lo mismo a esto:

Sub Sumar(ByRef Valor As Long)

 

2 - Las Funciones en visual basic

Las funciones son casi exactamente iguales que los procedimientos con respecto a la forma en que se los llama y se los crea o declara en el código, en como se le pasa los parámetros etc..

(13)

Para declarar o crear una función podríamos escribir lo siguiente:

Private Function Total(Valor1 As Integer, Valor2 As Integer) As Long Total = Valor1 + Valor2

End Function

Seguramente notaste que declaramos la función llamada Total, y al final de los parámetros dice As Long , esto es por que como dijimos las funciones retornan o devuelven un valor, o sea que en este caso la función es de tipo Long, o mejor dicho devolverá un valor de tipo Long., y luego ese valor devuelto lo podemos utilizar en otra parte del programa.

Las Funciones pueden retornar casi cualquier tipo de datos, como números, cadenas, fechas, arreglos y vectores

Para llamar a la función anterior podríamos hacerlo de la siguiente manera:

Label1.caption = Total 502, 1478

 

En este caso el control Label1 llamaría a la función Total , la función realizaría la suma de los valores pasados como parámetros y por último el valor final de la suma se lo asignaría al control label1.

(14)

3 - Ejercicios de ejemplo sobre procedimientos y funciones

Estos ejercicios y ejemplos tratan los temas vistos en esta sección, podés descargarlos en los enlaces de abajo. Los archivos en formato zip, contienen el código fuente y la descripción de los mismos en el mismo código fuente.

Ejemplo que llama a una subrutina, desde otra subrutina

Un ejemplo para crear un procedimiento:

Private Sub ProcedimientoBorrar()

label1 = "" label2 = "" label3 = ""

End Sub

En este ejemplo creamos un procedimiento muy simple que tendrá la función específica de borrar el contenido de 3 controles label.

¿ Pero ahora te preguntarás como hago para que se ejecute el procedimiento que he creado ?.

Muy fácil. Solo debemos escribir el nombre del procedimiento en el lugar donde queremos que se ejecute. Por ejemplo supongamos que tenemos un formulario con 3 controles Label (Label1, Label2 y Label3), También un Commandbutton llamado Command1 y en la ventana de código hemos escrito el procedimiento del ejemplo anterior. Si nosotros queremos llamar al procedimiento, que borrará el contenido de los label cuando hagamos click en el Command1 lo haríamos así:

(15)

ProcedimientoBorrar

End Sub

Al presionar el Command1 visual basic detectaría el nombre ProcedimientoBorrar, y automáticamente saltaría al lugar donde creamos el procedimiento y ejecutaría las líneas de código que haya en ese procedimiento.

También podemos llamar a un procedimiento utilizando la palabra Call, que quiere decir llamar, seguida del nombre del procedimiento, pero en este caso si

utilizamos call y nuestro procedimiento contiene parámetros, debemos pasarlos entre paréntesis ( los parámetros de procedimientos y funciones se explican a continuación)

una vez que se ha terminado de ejecutar las instrucciones que estén dentro del bloque del procedimiento, volvería a la línea siguiente de donde fue llamado el mismo, y ejecutaría todas las líneas restantes de código. En este caso no

ejecutaría nada mas por que no hemos puesto ninguna otra instrucción debajo de ProcedimientoBorrar.

(16)

Por ejemplo al formulario LP (de Listas de Precios) y al Boton VP (de Ver Precios)

Hagamos Doble Click en el boton VP que dice VER PRECIOS en la propiedad Caption y programemos lo que hay a continuacion mas abajo.

Private Sub VP_Click()

Dim A As Double 'Numeros con muchos decimales

A = InputBox("Ingresa el precio que quieres Saber CON IVA") A = A * 1.21 'Le agregamos el IVA

MsgBox A End Sub

PROGRAMA EN EL BOTON VP (procedimiento Click)

(17)

en otro lado, Obviamente salvo que no le cambiemos el nombre (pero eso no se nos va a ocurrir ;-))

Ok, vamos al final del texto donde esta programado el boton y escribimos lo siguiente (ver lo que no estaba antes) y cuando PRESIONEMOS ENTER veremos que se nos divide la pantalla y se nos Auto Completa con End Function y se ven Coloreados

Private Sub VP_Click()

Dim A As Double 'Numeros con muchos decimales

A = InputBox("Ingresa el precio que quieres Saber CON IVA") A = A * 1.21 'Le agregamos el IVA

MsgBox A End Sub

Function IVA(Precio As Double) As Double|

PASO UNO (Antes de PRESIONAR ENTER

Private Sub VP_Click()

Dim A As Double 'Numeros con muchos decimales

A = InputBox("Ingresa el precio que quieres Saber CON IVA") A = A * 1.21 'Le agregamos el IVA

MsgBox A End Sub

Function IVA(Precio As Double) As Double |

End Function

PASO DOS (Despues de PRESIONAR ENTER)

Que quiere decir eso de Function IVA(...? Quiere decir, que estamos creando una FUNCION que se va a llamar IVA y que va a necesitar de una variable de tipo NUMERICA que se llamar a Precio y la funcion IVA devolverá un Numero de DOBLE PRECISION. por eso, despues del parentesis dice ") As Double". Esta funcion asi vacia, no hace absolutamente NADA, pero entonces como devolvemos el Impuesto al Valor Agregado, es decir a Donde lo devolvemos?, es facil, si IVA es la funcion, pues ella tendra que ser igual a ALGO y precisamente sera igual al Precio por 1,21.

Private Sub VP_Click()

Dim A As Double 'Numeros con muchos decimales

A = InputBox("Ingresa el precio que quieres Saber CON IVA") A = A * 1.21 'Le agregamos el IVA

MsgBox A End Sub

Function IVA(Precio As Double) As Double

IVA = 1.21 * Precio 'Iva, sera 1,21 veces el Precio

End Function

(18)

Bueno, de que nos sirve tener la funcion IVA si no la usamos, para ello,

cambiemos el texto de la primera Rutina (el click del Boton VP) y usemosla, para usar una funcion solo es necesario encerrar entre parentesis lo que le queramos pasar para que calcule. Por ejemplo:

Si f(X)=X^2 (si f de X es X al cuadrado)

Entonces si X=2 (equis es igual a dos)

f(2) es igual a 4 por que 2^2 = 4 (^: Indica exponente en la INFORMATICA)

f(2) = 4

Entonces si usamos la funcion IVA podremos calcular el iva de UN PESO:

IVA(1) = 1.21

EXPLICACION SOBRE FUNCIONES

Podremos corregir el texto del click del Boton para que este use la funcion IVA.

Private Sub VP_Click()

Dim A As Double 'Numeros con muchos decimales

A = InputBox("Ingresa el precio que quieres Saber CON IVA") A = IVA(A) 'Le agregamos el IVA

MsgBox A End Sub

Function IVA(Precio As Double) As Double

IVA = 1.21 * Precio 'Iva, sera 1,21 veces el Precio

End Function

CODIGO ARREGLADO PARA USAR IVA (Funci

o

n Creada Por Nosotros)

Pero si queremos ahorrar una l

i

nea, por qu

e

no mostrar directamente el valor de

la funci

o

n

IVA

en vez de Guardarlo en

A

y mostrar

A

Private Sub VP_Click()

Dim A As Double 'Numeros con muchos decimales

A = InputBox("Ingresa el precio que quieres Saber CON IVA")

MsgBox IVA(A) 'Le agregamos el IVA y lo mostramos al mismo tiempo

End Sub

Function IVA(Precio As Double) As Double

IVA = 1.21 * Precio 'Iva, sera 1,21 veces el Precio

(19)

CODIGO ARREGLADO PARA USAR UNA LINEA MENOS EN EL

EVENTO CLICK

Ahora veamos alguna funciones que ya estan incluidas en Visual BBasic, o sea que ya estan Hechas, IVA es seguro que NO, por eso la tuvimos que crear y ahora la tenemos en el formulario LP. Hay otras que incluso hasta trabajan con texto. Necesitaremos hacer nosotros las nuestras cuando lo que necesitemos no esta hecho y no podamos repetirlo tanto (cuando sean muchas lineas de texto de programa). En la Seccion Siguiente FUNCIONES DE CONVERSION veremos como podremos usar todo lo que ya este hecho en Visual Basic Si Corremos este formulario, veremos que HACE:

(20)

Hagamos click en el boton...

Se nos hara la pregunta que programamos y LE PEDIMOS el precio de $100 con IVA

(21)

Figure

Actualización...

Referencias

Actualización...