Sei sulla pagina 1di 18

CENTRO CONCERTADO DE FORMACIN PROFESIONAL

Tema 6 Procedimientos
Programacin
Grupo: DAM 1

Mdulo: Programacin Grupo: DAM 1

Profesor: Teresa Valtuea

Unidad 6Pgina

Profesor: Teresa Valtuea

UNIDAD 6: PROCEDIMIENTOS
6-1. TIPOS DE PROCEDIMIENTOS Las usaremos: Si estamos haciendo un programa complejo o de cierta magnitud Necesitamos ejecutar un mismo bloque varias veces desde distintos sitios del cdigo Para dar ms claridad a nuestro mdulo Las rutinas (junto a las clases) son las herramientas que proporciona VB .Net para conseguir una programacin modular; es decir, en la que el proyecto o aplicacin se divide en unidades ms pequeas y fciles de manejar (llamadas mdulos). Desde el punto de vista de la programacin, una rutina no es ms que un bloque de cdigo bien delimitado al que le damos un nombre y que realiza alguna tarea bien definida. Cuando en nuestro programa necesitamos llevar a cabo esta tarea, llamamos a la rutina. En VB .NET las rutinas se conocen como procedimientos y existen cuatro tipos diferentes: Sub, Function, Property y de control de eventos. Los procedimientos Sub y Function: Permiten escribir rutinas de carcter general, diferencindose entre s por la cualidad de un procedimiento Function en devolver uno y solo un valor al cdigo que lo ha llamado, algo que no ocurre con el procedimiento Sub. No puede haber variables locales en la funcin o mtodo con el mismo nombre que uno de sus parmetros. Si queremos terminar un procedimiento o funcin antes de que llegue al final utilizaremos Exit Sub o Exit Function. Podemos crearlos donde queramos, dentro de un mdulo, como miembros de una estructura o como parte de una clase. Igual que las variables tambin pueden ser pblicos y privados. Por defecto si no se pone nada es pblico.

Mdulo: Programacin Grupo: DAM 1

Profesor: Teresa Valtuea

Unidad 6Pgina

Todas las variables contenidas los procedimientos sern locales, por lo tanto su vida comenzar cuando se ejecute y terminar cuando termine, y no sern visibles desde fuera Los procedimientos , Property y de control de eventos son procedimientos escritos con un objetivo limitado, sirviendo exclusivamente para ello, como se ver ms adelante.

6-2. CREAR PROCEDIMIENTOS FUNCTION Un procedimiento Function tiene que devolver uno y solo un valor al cdigo que lo ha llamado. Por ejemplo, estamos desarrollando una aplicacin para una empresa de mensajera. En dicha empresa se ha decidido que se necesita calcular los gastos de envo para poder facturarlos al cliente. Dichos gastos vienen determinados por dos factores: el nmero de bultos a transportar y la modalidad de envo elegida por el cliente. Necesitamos realizar una tarea bien definida como es la de calcular los gastos de envo. Observemos el siguiente cdigo: Module Module1

Sub Main() Dim argbulto, argmodalidad As Short Dim coste As Double Console.Write("Nmero de bultos a transportar: ") argbulto = CShort(Console.ReadLine) Console.Write("Modalidad de envo (0,1,2): ") argmodalidad = CShort(Console.ReadLine) End Sub

End Module

Mdulo: Programacin Grupo: DAM 1

Profesor: Teresa Valtuea

Unidad 6Pgina

Una cuestin importante es donde escribimos el procedimiento. Si deseamos que est disponible para cualquier Parte de la aplicacin es preferible hacerlo en un mdulo independiente, como lo hemos hecho. Function calcularCoste(bultos as Short, modalidad as Short) as Double ste es el aspecto de un prototipo de procedimiento Function: Se identifica con la palabra Function Tiene un nombre, en este caso es calcularCoste Tiene una lista de parmetros: bultos y modalidad Devuelve un valor de tipo en este caso Double

Es posible que los procedimientos (de cualquier tipo) no utilicen parmetros, en cuyo caso no haran falta los parntesis, pero es aconsejable ponerlos siempre, tanto en su declaracin como en su llamada.
Prototipo (cabecera)

Function calcularCoste(ByVal bultos As Short, ByVal modalidad As Short) As Double

Dim recargo As Double Select Case modalidad Case 0 recargo = 1.85 Case 1 recargo = 3.05 Case 2 recargo = 6.01 Case Else recargo = 0 End Select calcularCoste = recargo + (bultos * 2.25)
Cuerpo

Mdulo: Programacin Grupo: DAM 1

Profesor: Teresa Valtuea

Unidad 6Pgina

End Function

En el cuerpo del procedimiento se incluyen aquellas instrucciones necesarias para que el procedimiento lleve a cabo la tarea que tiene asignada. As, utilizaremos una variable donde almacenaremos el recargo que se debe aplicar segn la modalidad del servicio que haya seleccionado el cliente. La variable recargo est declarada en el interior del procedimiento, mientras que modalidad es un parmetro de dicho procedimiento. La lnea ms importante es aquella en la que asignamos el valor a devolver al nombre del procedimiento Function: calcularCoste = recargo + (bultos * 2.25) En el interior del bucle, el nombre del procedimiento Function acta como si fuera una variable. Hay una forma alternativa de indicar el valor que devuelve el procedimiento y es utilizando la instruccin Return en lugar del nombre: Return recargo + (bultos * 2.25). La diferencia radica en que al utilizar Return, el procedimiento finaliza inmediatamente, mientras que si se utiliza el nombre del procedimiento Function, la ejecucin contina en la lnea siguiente del procedimiento. Hay que recordar los siguientes detalles: Utilizamos los parmetros en el cuerpo del procedimiento como si fueran variables de su tipo de datos. Hemos declarado una variable en el interior del procedimiento, por lo que solo puede utilizarse en dicho procedimiento. En el cuerpo de un procedimiento Function indicamos el valor que devuelve bien asignndolo al nombre de dicho procedimiento o utilizando la instruccin Return. Siempre tiene que devolver un valor, sino al compilar da error.

6-3 LLAMAR A PROCEDIMIENTOS FUNCTION. Hasta ahora hemos visto cmo declarar un procedimiento Function y escribir el cdigo que va a tener asociado. Pero el procedimiento en s no sirve de nada si no se le llama desde alguna parte del proyecto. Es decir, por ahora lo nico que se ha hecho es indicar qu har el procedimiento, pero todava no lo hemos utilizado. Para ello es necesario llamarlo.
Mdulo: Programacin Grupo: DAM 1 Profesor: Teresa Valtuea Unidad 6Pgina

Sub Main() Dim argbulto, argmodalidad As Short Dim coste As Double Console.WriteLine("numero de bultos a transportar") argbulto = CShort(Console.ReadLine) Console.WriteLine("modalidad de envio(0,1,2): ") argmodalidad = CShort(Console.ReadLine) coste = calcularcoste(argbulto, argmodalidad) Console.WriteLine("el coste total es " & coste) Console.ReadLine() End Sub Utilizaremos los valores introducidos por el usuario a la hora de realizar el clculo. Estos valores estn almacenados en las variables argbulto y argmodalidad, que sirven como argumentos en la llamada al procedimiento. De esta forma le comunica al procedimiento lo que necesita saber para poder realizar el clculo, es decir, el nmero de bultos a transportar y la modalidad elegida. El resultado de la llamada al procedimiento Function se almacena en la variable coste. Lo importante es darse cuenta de que el nombre del procedimiento Function tendr uno y solo un valor asociado, por lo que la asignacin es correcta. Debemos diferenciar claramente cuando estamos declarando un procedimiento y cundo lo estamos llamando. Declararemos y escribiremos el cdigo del procedimiento una sola vez, pero lo podremos utilizar las veces que queramos simplemente llamndolo.

Mdulo: Programacin Grupo: DAM 1

Profesor: Teresa Valtuea

Unidad 6Pgina

6-4. CREAR PROCEDIMIENTOS SUB La diferencia fundamental entre los procedimiento Function y los Sub es que estos ltimos no devuelven ningn valor. Normalmente, los procedimientos Fuction se relacionan con operaciones y los Sub con tareas o procesos a realizar. Sin embargo, se puede transformar un procedimiento Fuction en un procedimiento Sub de forma muy sencilla. Como los procedimientos Sub no devuelven ningn valor no tiene sentido especificar su tipo de datos en la declaracin:

Sub calcularCoste(ByVal bultos As Short, ByVal modalidad As Short, ByVal gastos As Double) Dim recargo As Double Select Case modalidad Case 0 recargo = 1.85 Case 1 recargo = 3.05 Case 2 recargo = 6.01 Case Else recargo = 0 End Select gastos = recargo + (bultos * 2.25) End Sub La siguiente diferencia es que el nombre del procedimiento Sub no puede utilizarse como una variable ms en el cuerpo del mismo, ya que no va a tener relacionado ningn valor cuando finalice su ejecucin. Por ello es necesario utilizar un nuevo parmetro para almacenar dicho valor. Por eso la aparicin del parmetro gastos.
Mdulo: Programacin Grupo: DAM 1 Profesor: Teresa Valtuea Unidad 6Pgina

De esta forma podemos devolver los valores que queramos, incluyendo un parmetro para cada uno de ellos. Los procedimientos Function tienen, por definicin, que devolver un nico valor, asociado precisamente a su nombre.

6-5 LLAMAR A PROCEDIMIENTOS SUB La llamada a un procedimiento Sub es diferente a la de un procedimiento Function, ya que constituye una instruccin ms. La llamada no la vamos a encontrar en el interior de ninguna expresin. Cuando queramos realizar el proceso o tareas que realiza el procedimiento, incluiremos una instruccin en su cdigo que coincide con la llamada al mismo:

Module Module1 Sub Main() Dim argbulto, argmodalidad As Short Dim coste As Double Console.WriteLine("numero de bultos a transportar") argbulto = CShort(Console.ReadLine) Console.WriteLine("modalidad de envio(0 , 1 , 2): ") argmodalidad = CShort(Console.ReadLine) calcularcoste(argbulto, argmodalidad, coste) 'si pongo = es variable,si no es el nombre del procedimiento Console.WriteLine("el coste total es " & coste) Console.ReadLine() End Sub End Module

Mdulo: Programacin Grupo: DAM 1

Profesor: Teresa Valtuea

Unidad 6Pgina

stas son las diferencias en la llamada: Eliminamos la asignacin a una variable del valor devuelto, justamente porque no existe ningn valor asociado con el nombre del procedimiento Sub. Aadimos el ltimo parmetro que necesita el procedimiento. La variable coste de ste mdulo sirve para lo mismo en ambos casos, pero utilizndola de forma diferente.

Sin embargo, si ejecutamos el proyecto, comprobaremos que el resultado obtenido es incorrecto, ya que nos indica que para un determinado nmero de bultos a transportar y una modalidad contratada, los gastos de envo siempre son 0 unidades monetarias. El cdigo es correcto, tanto en la declaracin como en la llamada al procedimiento Sub. Sin embargo hay un detalle que no hemos tenido en cuenta y que explicaremos a continuacin.

6- 6 PASO DE PARMETROS Los parmetros permiten comunicar el cdigo que llama el procedimiento con el propio procedimiento. As hemos visto que al llamar al procedimiento calcularCoste le pasbamos el n de bultos a transportar y la modalidad de servicio contratada. Tambin hemos visto que podemos utilizar los parmetros en sentido contrario: para devolver resultados al cdigo que ha llamado al procedimiento Sub. Por defecto el paso de parmetros en VB .NET es por valor, lo que quiere decir que el procedimiento trabaja con una copia de los argumentos pasados en la llamada y no con las variables realmente pasadas. Sub calcularCoste(ByVal bultos As Short, ByVal modalidad As Short, ByVal gastos As Double)

ByVal indica que estamos pasando el parmetro por valor. Por lo tanto, la modificacin que podamos hacer en el interior del procedimiento sobre dicho parmetro no se ver reflejada tras la llamada, ya que se hace sobre la copia del argumento y no sobre la variable utilizada. Hay otra forma de pasar los parmetros: por preferencia. En este caso el procedimiento trabaja realmente con la variable que sirve de argumento en la llamada y no con la copia de ella lo que permite modificar su valor.

Mdulo: Programacin Grupo: DAM 1

Profesor: Teresa Valtuea

Unidad 6Pgina

Sub calcularCoste(ByVal bultos As Short, ByVal modalidad As Short, ByRef gastos As Double)

Esto nos interesa en el caso del parmetro gastos. Debemos pasarlo por referencia para que tras la ejecucin del procedimiento se quede almacenado el valor resultante en la variable que se ha utilizado en la llamada. Para ello se utiliza la palabra ByRef. Ahora, al modificar el valor de gastos en el interior del procedimiento, realmente lo estaremos haciendo en la variable que se ha utilizado en la llamada al mismo. El paso de parmetros por referencia es til cuando el argumento utilizado ocupa mucha memoria, como puede ser si se trata de una matriz. Adems, excepto en este caso, no deberamos utilizar nunca el paso por referencia en un procedimiento Function, ya que el valor que tiene que devolver est asociado con su nombre. 6- 7 PARMETROS OPCIONALES Hay veces que tenemos algn parmetro que es opcional, en ese caso lo declararemos como tal Function RaizCuadrada(Optional ByRef Valor as Integer = 0) Deben colocarse al final de la declaracin y a partir de l todos los que haya detrs deben serlo tambin. Debe tener un valor por defecto, que se indica en la declaracin

6- 8 MTODOS SOBRECARGADOS Se puede definir el mismo mtodo varias veces con distintos parmetros Sub Saludar() Console.WriteLine("Hola") End Sub Sub Saludar(ByVal nombre As String) Console.WriteLine("Hola " & nombre) End Sub Podemos definir distintos parmetros y de distintos tipos
Mdulo: Programacin Grupo: DAM 1 Profesor: Teresa Valtuea Unidad 6Pgina

10

Cambiar el nombre del parmetro no es sobrecargar, sera el mismo mtodo Tambin podemos cambiar el tipo de dato devuelto

6- 9 PARMETROS: PARAMARRAY Si necesitamos disponer de un nmero indeterminado de parmetros, podemos utilizar ParamArray Tiene que estar definido al final de todos los argumentos

Public Sub MuestraCadenas(ByVal ParamArray Cadena() As Object) Dim Elemento As Object For Each Elemento In Cadena Console.WriteLine("{0} -> {1}", Elemento.GetType.ToString(), Elemento) Next End Sub Una llamada podra ser esta: MuestraCadenas(1, "Hola", True, Now, 11.34)

EJEMPLOS Function Operacion (ByVal n As Integer) As Date Function Operacion (ByVal s As String) As Date Function Operacion (ByVal t As Date, ByVal d as Date) As Integer Para llamarla d = Operacion(10) d = Operacion("Hola") n = Operacion(d,d2)

Mdulo: Programacin Grupo: DAM 1

Profesor: Teresa Valtuea

Unidad 6Pgina

11

6-8 MBITO Y DURACIN El mbito de una variable o procedimiento es el conjunto de cdigo que puede hacerla referencia a travs de su nombre. Cuando un proyecto est compuesto por distintos mdulos, ya sean formularios, clases, mdulos de carcter general, etc., es importante delimitar donde se pueden utilizar y dnde no, los procedimientos, variables, constantes y dems objetos. VB .Net incluye las palabras Public y Private con este fin. Una declaracin de variable del tipo Public nombreVariable As Tipo indica que dicha variable puede ser utilizada tanto en el mdulo donde se declara como en el resto de los mdulos de la aplicacin, Sin embargo, si la declaramos como Private nombreVariable As Tipo, dicha variable solo podra ser conocida en el mismo mdulo donde se declara. Las palabras Public y Private tambin pueden usarse en la declaracin de los procedimientos con el mismo significado. Por defecto, el acceso a los procedimientos es Public, por lo que estn disponibles en todo el proyecto si no se especifica ningn modificador de acceso. Sin embargo, el acceso predeterminado a las variables es Private. Por lo tanto cuando utilizamos la palabra Dim, es como si utilizramos Private. Finalmente, las variables que se declaran en el interior de los procedimientos son locales a stos y, por lo tanto, solo accesibles desde su interior. Esto permite declarar una variable a nivel de procedimiento (local) y a nivel de mdulo (global) con el mismo nombre. En este caso, la variable local tendr preferencia en el interior del procedimiento, mientras que fuera de l solo se podr utilizar la que fue declarada a nivel de mdulo. En cuanto a la duracin de las variables, hay que tener en cuenta que las variables globales existen desde el momento en que son declaradas y se mantienen en toda la ejecucin. Sin embargo, las variables locales slo consumen r4ecursos en el momento en que se llama el procedimiento en el que fue declarada y desaparecen al finalizar la ejecucin de dicho procedimiento.

6- 9 EL PROCEDIMIENTO Main() El cdigo que ejecutamos se encuentra normalmente en un procedimiento llamado Main.
Mdulo: Programacin Grupo: DAM 1 Profesor: Teresa Valtuea Unidad 6Pgina

12

En toda aplicacin debe haber un punto de inicio, es decir, el cdigo que se ejecuta inicialmente y que ir llamando a otras partes del proyecto a medida que se necesitan. Este punto de inicio puede ser un determinado formulario o un procedimiento cuyo nombre debe ser Main Esto lo podemos especificar en las propiedades del proyecto, en la seccin General de la carpeta Propiedades comunes. Debemos utilizar la lista Objeto inicial para ello.

Mdulo: Programacin Grupo: DAM 1

Profesor: Teresa Valtuea

Unidad 6Pgina

13

Prctica 1
Crear un procedimiento (Sub) llamado Instruccion al que se le pasa una frase y la saca por pantalla Llamarlo desde el mtodo Main

Prctica 2
Pedir por pantalla un nmero Llamar a un procedimiento al que se le pasa como parmetro ese nmero y calcule el resultado de sumarle 10 y multiplicarlo por 3 Escribir el resultado por pantalla desde el mtodo Main (Lo hacis con procedimiento Function y Sub)

Prctica 3
Crear un procedimiento al que se le pasa como parmetros un nmero y una cadena y obtenga el resultado de multiplicar ese nmero por la longitud de la cadena Llamarlo desde el procedimiento Main pidiendo esos datos por pantalla y escribir en l el resultado. (Lo hacis con procedimiento Function y Sub)

Prctica 4
Pedir por pantalla 3 palabras Sacarlas alternando maysculas y minsculas por pantalla albaricoque -> aLbArIcOqUe

Prctica 5
Pedir por pantalla una palabra y un nmero Llamar a una funcin pasndoselos como argumentos, y que devuelva el carcter de la posicin indicada por ese nmero dentro de la cadena Sacarlo por pantalla

Mdulo: Programacin Grupo: DAM 1

Profesor: Teresa Valtuea

Unidad 6Pgina

14

Prctica 6
Crear una funcin que reciba una cadena y un carcter, y que devuelva un booleano indicando si el carcter est contenido en la cadena Pedir por pantalla una palabra y un carcter y llamar a esa funcin

Prctica 7
Crear un procedimiento que reciba una frase y una palabra, y que devuelva si la palabra est o no en la frase y si est, cuntas veces y en qu posiciones. Pedir por pantalla una frase y una palabra y llamar a esa funcin. El ejercicio se realiza para distintas frases y palabras y termina al introducir en frase la palabra FIN.

Prctica 8
Crear un procedimiento llamado DivisionCadena que divida una cadena, que recibe como parmetro, por el carcter pasado en otro parmetro y saque los trozos por pantalla Desde el procedimiento Main Pedir los datos por pantalla Llamar al procedimiento DivisionCadena

Prctica 9
Pedir nmeros por pantalla un nmero hasta meter un enter Si el nmero es par: Mostrar por pantalla el da, mes y ao que sera si le sumamos a los das actuales ese nmero multiplicado por 24 Sacar tambin qu da sera, en espaol Si es impar Pedir una palabra por pantalla Aadirle el nmero introducido de veces el carcter # al principio Sacar por pantalla los caracteres de posicin par

Mdulo: Programacin Grupo: DAM 1

Profesor: Teresa Valtuea

Unidad 6Pgina

15

Prctica 10
Calculo de un nmero combinatorio Introducir dos nmeros por teclado los cuales deben ser mayores que 1 y menores de 30 y el primero mayor que el segundo. El numero combinatorio es el resultado de la divisin del factorial del mayor entre el producto del factorial del menor por el factorial de la diferencia entre el nmero mayor y el menor.

Prctica 11
Crear un procedimiento que reciba un entero y que pueda recibir una cadena o no, cuyo valor por defecto sea "Hola" Si el nmero introducido es menor que la longitud de la cadena, sacar por pantalla el carcter de esa posicin, si no, indicar que el nmero es mayor que la longitud (sacar el valor de la longitud) Pedir por pantalla una cadena y un nmero Podemos introducir una cadena vaca, pulsando Enter Llamarlo de las dos formas desde el procedimiento Main

Prctica 12
Presentar una aplicacin que presente lo siguiente: Elige una opcin: 1-Introducir numero 2-Intoducir cadena 3-Fin Si elegimos la primera opcin, el ordenador debe preguntarnos por un nmero mayor que 17 y menor que 55 y realizar lo siguiente: Si el nmero introducido es par debe, calcular los divisores de dicho nmero y escribirlos por pantalla. Si el nmero introducido es impar debe escribir por pantalla los nmeros primos menores que l. Si elegimos la segunda opcin, el ordenador debe preguntarnos por una frase con ms de 25 caracteres y que tenga una 'r' en el lugar 10 (teniendo en cuenta que la primera posicin es la 0 y presentar otro men con las siguientes opciones:. 1-Separar la frase por palabras 2-Introducir una palabra y decir si se encuentra en la frase 3-Introducir una palabra y si se encuentra en la frase cambiarla por otra palabra que introduciris por teclado. 4-Fin
Unidad 6Pgina

Mdulo: Programacin Grupo: DAM 1

Profesor: Teresa Valtuea

16

Prctica 13
Crear dos mtodos llamados Operacion, uno que reciba como parmetros una cadena y el otro un entero El que recibe la cadena la muestra por pantalla El que recibe el nmero lo multiplica por 2 y muestra el resultado por pantalla Pedir por pantalla que escriban una palabra o un nmero Llamar a la funcin Operacion, segn el tipo de dato que introduzcan

Prctica 14
Aadir a la aplicacin anterior una funcin sobrecargada: Que no reciba nada y devuelva 10 Que reciba un nmero y devuelva la fecha que sera dentro de esos das Llamarlas desde el procedimiento Main

Mdulo: Programacin Grupo: DAM 1

Profesor: Teresa Valtuea

Unidad 6Pgina

17

Potrebbero piacerti anche