Sie sind auf Seite 1von 24

Universidad Jos Antonio Pez

Facultad de Ingeniera
Direccin General de Estudios Bsicos y Generales
Coordinacin de Informtica
Programacin II

Teora de Subprogramas
Procedimientos en Visual Basic Net 2010
Prof. Hugo Hernndez

Junio de 2014
Versin 1.1 En revisin para
publicacin

Teora de Subprogramas

Tabla de contenido
Subprogramas en Visual Basic Net 2010 ............................................................................................. 3
Ventajas de la programacin modulada ......................................................................................... 4
Tipos de Subprogramas o Procedimientos.......................................................................................... 4
Subprogramas Tipo Procedimientos ............................................................................................... 5
Subprogramas Tipo Funciones........................................................................................................ 6
Parmetros ........................................................................................................................................ 8
Parmetros Formales ..................................................................................................................... 9
Parmetros Por valor (ByVal) .................................................................................................... 9
Parmetros Por Referencia (ByRef) ..........................................................................................10
Parmetros actuales .....................................................................................................................10
Llamado o invocacin de subprograma .............................................................................................12
Ejemplos demostrativos del proceso de modulacin y llamado de subprogramas .........................13
Ejercicio 1 rea de un tringulo ..............................................................................................13
Ejercicio 2 Determinacin de la Combinatoria de N en M........................................................19
Bibliografa .......................................................................................................................................24

Prof. Hugo Hernndez | Pgina 2 de 24

Teora de Subprogramas

Subprogramas en Visual Basic Net 2010


Una de las fallas que se tena al principio de la
programacin estructurada era el hecho que los
programas se hacan largos debido a la repeticin de
instrucciones en procesos como de lectura, escritura o
clculos, en donde se tenan que realizar el mismo
procedimiento de trabajo pero empleando variables
diferentes. Gracias a la necesidad de ahorrar tiempo de
diseo y espacio de memoria surge la tcnica de
modulacin de procesos o elaboracin de subprogramas, que en el lenguaje de
programacin Visual Basic Net (VB.Net) lo denominan Procedimientos. La tcnica de
modulacin consiste en dividir un programa muy grande en una serie de mdulos muchos
ms pequeos y manejables (subprogramas), orientados a realizar una actividad en
particular en forma generalizada.
Es decir, al momento de disear un subprograma o procedimiento como se nombran en
VB.Net, el programador le establecea la maquina la metodologa que debe seguir cada vez
que tenga que hacer esa actividad sin necesidad de colocar el cdigo nuevamente, sin
importar con que valores o variables debe funcionar dicho proceso.

Subprograma
Un subprograma o procedimiento como se conoce en VB.Net, es una secuencia de
instrucciones orientadas a realizar una tarea especfica que se quiere generalizar
(Modular) para su uso posterior al ser invocado por otro procedimiento sin la necesidad
de tener que repetir las mismas lneas de instruccin.

Esto implica que existir un proceso principal, denominado programa principal(Ej. Main), el
cual establece cuando se le debe transferir el control de la ejecucin del programa a un
subprogramaen particular, para que est efecte una tarea solicitada.Para pasarle el control
al subprograma el programa principal invoca o llama al modulo con su nombre y se establece
con que valores este va a trabajar de requerirlo, una vez que terminen de efectuar las
instrucciones, el modulo le transfiere de nuevo el control a quien lo llam. Este proceso de
llamado se puede efectuar tantas veces sean necesario realizar en la ejecucin del trabajo
sin necesidad de escribir nuevamente el cdigo.
Como ya se ha dicho, en el momento de invocar un subprograma, si la actividad a realizar
requiere de valores o datospara poder ejecutarse, estos datos se transfieren con el uso de
parmetros. Los parmetros es la forma como se comunica el programa principal con el
modulo invocadodando la posibilidad delintercambio de informacin necesaria entre ellos.
Los subprogramas deberan ser cortos y para desarrollarlos se seguirn todas las
reglas, estructuras y herramientas de programacin habituales, centrndose en
resolver nicamente la tarea que se desea generalizar.

Prof. Hugo Hernndez | Pgina 3 de 24

Teora de Subprogramas

Ventajas de la programacin modulada


 Permiten eliminar lneas repetidas en el cdigo. Las
instrucciones se escriben una vez, a pesar de tener que
realizar varias veces la misma tarea para la solucin del
problema completo, y en ese caso solo se requiere que este
sea invocado.
 Permite que los programas sean ms legibles o fcilmente
comprensibles. Un programa dividido en varias partes ms
pequeas es ms fcil de entender.
 Simplifican el desarrollo del programa. Los programas separados en unidades lgicas
o subprogramas son ms fciles de disear, escribir y depurar.
 Se pueden volver a utilizar en otros proyectos o soluciones, permitiendo el ahorro de
tiempo. Los procedimientos o subprogramas desarrollados pueden incorporarse en
un mdulo estndar en otros proyectos, permitiendo as poder usarlos como los que
estn predefinidos en el lenguaje.
 Varios programadores pueden trabajar simultneamente, repartindose los distintos
subprogramas, ya que son mdulos independientes, que luego se engranan.
 Se podr modificar un mdulo o subprograma, sin afectar a los dems.

Tipos de Subprogramas o Procedimientos


En el lenguaje de programacin Visual Basic Net se dispone de los siguientes tipos de
subprogramas:
1) Procedimientos (Sub): son subprogramas que al ser invocados realizan una actividad sin
devolver un valor al punto de llamado. Estos procedimientos se encuentran clasificados
en:
a) Procedimientos de eventos: son los que se ejecutan como respuesta a un evento y
estn asociados a un objeto. Ej.
Sub Button2_Click( Parmetros ) Handles Botton2.Click

b) Procedimientos Generales: son los procedimientos creados por el usuario, los cuales
pueden ser usados invocndolos por su nombre. Ej.
Sub LeerDatos( Parmetros )

2) Funciones (Function): es un subprograma que sus instrucciones a realizar estn


orientado a devolver un resultado de un tipo de dato en particular, el cual entrega
utilizando su propio nombre y se clasifican en:
a) Intrnsecos: Funciones que estn predeterminados o provistas por el lenguaje. Ej.
Rdn(), Int(x), etc.
b) Simblicas: Creado por el usuario cuando el lenguaje no provea una funcin
especfica o especial. Ej.
Function Distancia( Parmetros ) As Single

3) Propiedades (Property): son subprogramas que realizan labores de acceso que permitan
devolver y asignar valores, as como establecer referencias a objetos.
Prof. Hugo Hernndez | Pgina 4 de 24

Teora de Subprogramas

Para fines del curso solo trabajaremos en la construccin de procedimientos tipo Sub y/o
Function, ya que los procedimientos tipo Property tiene sentido cuando se est realizando
una Programacin Orientado a Objetos, forma de programacin que se explica en una
siguiente asignatura de programacin.

Subprogramas Tipo Procedimientos


Como ya se mencion anteriormente, con Visual Basic se puede
desarrollar distintos tipos de subprograma pero entonces, cual
implementar a la hora de desarrollar un mdulo, la respuesta a
esta pregunta depender de la tarea en si a generalizar.
Para el caso particular de la utilizacin de un procedimiento,
cualquier tarea que se quiera modular se puede desarrollar como
un subprograma de este tipo, sin importar si la actividad a
generalizar est orientada o no a generar valores resultantes.
Entonces en que momento es mejor desarrollar el mdulo como
un procedimiento y no otro de los tipo disponibles. La respuesta a
esto es muy simple, si la generalizacin a establecer representa un proceso a seguir (ej.
lectura o impresin de datos, actualizacin de campos, etc.), el mdulo ser del tipo
procedimiento.

Procedimientos
Es un subprograma cuya secuencia de instrucciones estn orientadas a realizar una tarea
especfica que se quiere generalizar (Modular), la cual puede o no devolver resultados.
Estos se desarrollan cuando la tarea a generalizar es referente a un proceso a seguir.

Ahora si se decide desarrollar el mdulo como un procedimiento su definicin, sin importar


cul sea la actividad, se realizar dentro del cuerpo de la aplicacin desarrollada, para el caso
de ser esta del tipo consola estamos hablando entre el cuerpo predeterminado Module
Module1 y End Module, y fuera de cualquier otro subprograma que se haya desarrollado,por
comodidad se definen esencialmente antes del procedimiento de arranque del programa
Sub Main(), aunque en realidad se puede realizar en cualquier parte.
Para los procedimientos su definicin se realiza con la palabra reservada Sub, luego el
identificador o nombre que se le quiere dar al subprograma y entre parntesis la lista de
parmetros que se requieren pasar para que el subprograma realice las actividades a
generalizar. El procedimiento finaliza con las palabras reservadas End Sub.
Entre la cabecera del procedimiento y su finalizacin se colocan todas las instrucciones que
debe ejecutar el subprograma para lograr realizar la actividad a generalizar, de igual forma
como se ha realizado anteriormente con el Sub Main().

Prof. Hugo Hernndez | Pgina 5 de 24

Teora de Subprogramas

Sub Nombre_procedimiento(Lista_de_parmetros)
Instrucciones a realizar

End Sub

Cabe destacar que en el lenguaje de programacin Visual Basic Net, no se permite la


construccin de subprogramas anidados, es decir procedimientos definidos dentro de otros
procedimientos, sino se podra es crear subrutinas internas. Para fines del curso no se
realizaran dichas subrutinas entre otras cosas ya que esto rompera con el concepto de ser
un lenguaje estructurado, adems que es una actividad poco recomendada.
Al definir un procedimiento, se hizo una generalizacin de un proceso que realiza una
actividad en particular, al momento de querer emplear ste, su invocacin o llamado se
efecta utilizando su propio nombre y entre parntesis las variables o datos que se quiere
que utilice al momento de ejecutar las instrucciones que posee, a este proceso se le llama el
paso de parmetros al procedimiento, situacin que estaremos discutiendo ms adelante.
No se puede colocar el llamado a un procedimiento del lado derecho de una instruccin
de asignacin, ni como parte de una expresin o frmula. Ya que el funcionamiento de
un procedimiento es de una instruccin a ejecutar.

Al finalizar la explicacin terica de todos los conceptos del tema, estos se


colocaran
en
prctica
utilizando
un
programa
que
se
desarrollarinicialmente con un estilo de programacin estructurada y luego
se dividir en subprogramas quepermitan crear una aplicacin ms legible.

Subprogramas Tipo Funciones


En la seccin anterior se estableci que con los subprogramas tipo
procedimientos, se puede modular todas las actividades que se
quieren generalizar, sin embargo hemos establecido que el uso de
este tipo de subprograma lo vamos a emplear cuando el objetivo
del mdulo es referente a las instrucciones a seguir para realizar una actividad o proceso en
particular. Ahora por otro lado, si la actividad que se quiere generalizar est orientada a
determinar o devolver un nico valor, en este caso se implementa un subprograma tipo
funcin.

Funcin
Es un subprograma cuya secuencia de instrucciones estn orientadas a realizar una tarea
especfica que se quiere generalizar (Modular), la cual devuelve un dato de un tipo en
particular. Este valor es devuelto por la misma funcin, es decir con su mismo nombre.
Prof. Hugo Hernndez | Pgina 6 de 24

Teora de Subprogramas

La definicin de una Funcin, se realiza con la palabra reservada Function, luego el


identificador o nombre que se le quiere dar, posteriormente entre parntesis la lista de
parmetros que se requieren pasar para que el subprograma realice la actividad a
generalizar y finalmente el tipo de resultado que va a devolver. El tipo de dato a devolver
puede ser un dato primitivo o cualquier otro tipo de dato definido en el lenguaje o por l
programador.
El subprograma finaliza con las palabras reservadas. Esto hace que el comportamiento que
se le da a una funcin es similar al de una variable del mismo tipo que esta devuelve End
Function

Al igual que para el caso delos procedimientos, entre la cabecera del subprograma y la
finalizacin se realizaran todas las actividades necesarias para determinar u obtener el valor
a devolver, pero a diferencia delos procedimientos entre estas instrucciones debe existir al
menos una instruccin donde se le asigne al nombre de la funcin el valor a devolver.

Function Nombre_funcion (Lista_de_parmetros) As Tipo_de_salida


Instrucciones a realizar

Nombre_Funcion = Resultado_a_devolver
End Function

Cuando se quiere invocar o llamar una funcin, estos son llamados dentro de una expresin
(ej. asignacin, comparacin, etc.), siempre y cuando dicha expresin es capaz de soportar el
tipo de dato que la funcin devuelve, y se realiza empleando el nombre de la funcin y entre
parntesis los valores o datos esta quiere para realizar el la tarea.
Cabe destacar que una funcin representara un procedimiento sub que
se haya diseado para generalizar un proceso que devuelva un valor en
particular. Por este motivo se establece que toda funcin puede ser
desarrollada como un procedimiento, pero no todo procedimiento puede
ser diseado como una funcin.
El llamado de una funcin no debe aparecer al lado derecho de una instruccin de
asignacin o dentro de las instrucciones a ejecutar el subprograma al momento de su
diseo. Esta ltima consideracin es debido a que llamar una funcin en s misma, es un
concepto que no iremos a manejar este curso, denominado Funciones Recursivas

Visual Basic. Net, tiene otra forma de asignarle a la funcin el valor a


devolver y es empleando la palabra reservada Return. Es decir en vez de
escribir la instruccin de asignacin:
NombreFuncion = Valor_a_Devolver

se coloca,
Return Valor_a_Devolver

Prof. Hugo Hernndez | Pgina 7 de 24

Teora de Subprogramas

Tabla comparativa entre los tipos de subprogramas Sub y Function


Aspecto

Proceso que
generaliza
Forma del
llamado

Subprograma
Procedimiento (Sub)
Una actividad que de querer
regresa ningn, un valor o ms de
uno, dicho valor o valores son
devueltos empleando parmetros
del tipo por referencia.

Funcin (Function)
Una
actividad
de
clculo
o
interpretacin de valores que generan
un nico valor resultante, el cual se
este es devuelto por la funcin con su
nombre.

Como una Sentencia o instruccin. Como si fuese una variable a emplear


dentro de una expresin.

Parmetros
Un aspecto que tenemos que identificar en la generalizacin de una tarea es que
informacin o datos esta requiere para poder realizarse de manera genrica, para lograr
esto en un subprograma se deben establecer estos datos en forma de parmetros tanto en
la cabecera del mdulo como al momento de ser invocado.

Parmetros o Argumentos
Son variables intermedias propias del subprograma, que sirve de medio de comunicacin
entre el procedimiento que lo invoca y el modulo en s, haciendo posible pasar valores a los
subprogramas al momento de tener que utilizarlos en una aplicacin.

En este sentido, un parmetro representa un dato que requiere pasar al subprograma


necesario para ejecutar las instrucciones definidas en la tarea, o que su valor ser devueltoal
mdulo que lo invoca.
Entonces un parmetro, al momento de ser invocado ser un valor que
puede venir de forma constante, almacenada en una variable o
proveniente de la evaluacin de una expresin, o una variable que tiene
como propsito recibir en valor que el subprograma genera o calcula
mediante las instrucciones definidas para la tarea.
En VB.Net, los parmetros se clasifican en dos tipos:
a) Parmetros Formales: Son las variables que emplea el procedimiento para
generalizar un proceso y se definen al momento de disear el procedimiento. Los
parmetros formales puedes ser: Por Valor (ByVal), Por Referencia (ByRef) o del tipo
Opcional (Optional). Para fines del curso solo estaremos trabajando con parmetros
del tipo por valor y/o por referencia.
b) Parmetros Actuales: Son las variables, Constantes o Expresiones que se van a
emplear al momento de invocar el procedimiento, para as el procedimientos saber
con qu valores va a trabajar.

Prof. Hugo Hernndez | Pgina 8 de 24

Teora de Subprogramas

Parmetros Formales
Como se dijo anteriormente, los parmetros son las variables que emplea el procedimiento
para generalizar un proceso, significa que estas variables tienen que ser definidas en algn
momento para que el mdulo que lo invoque reconozca que informacin va a ser
intercambiada, esto se realiza en el momento de definir elsubprogramadentro de los
parntesis colocados despus del nombre que posee l al momento de disear el mdulo.
Todas las variables definidas en la cabecera del subprograma se conocen como parmetros
formales

Parmetros Formales
Es la definicin de la informacin en forma de variables, que se debe intercambiar entre el
subprograma y el mdulo que lo invoca, al momento de ser este requerido su uso en el
programa. Esta definicin se establece al momento de disearse el subprograma y en
forma individual.

La definicin de los parmetros se diferenciar de la manera en que estamos acostumbrados


a declarar una variable en el hecho que no se emplear la palabra reservada Dim, sino segn
como vaya a ser el comportamiento del parmetros en la tarea a generalizar se utilizar la
palabra ByVal o ByRef. Es decir, los parmetros formales se clasifican en parmetros por
valor y parmetros por referencia, como se coment antes hay una tercera categorizacin
que son los parmetros opciones pero no sern tomados en cuenta en el desarrollo del
curso.
Estas variables definidas en la cabecera del subprograma, as tengan el
mismo identificador de una variable empleada en otro procedimiento [ej.
Main()], ser una variable diferente y le pertenece al mbito del
subprograma a definir, es decir representa una variable local al
subprograma
Parmetros Por valor (ByVal)

Al definir un parmetro formal del tipo por valor, se debe emplear la palabra reservada
ByVal, esta declaracin del parmetro significa que el procedimiento lo que quiere como
informacin es un valor particular (se establece como una Variable de entrada), el cual el
subprograma tomar una copia de ese valor para ser usado en las lneas de cdigo y si de
alguna forma las instrucciones que posee el mdulo realiza un cambio en el valor pasado,
dicho cambio no saldr del procedimiento al mdulo que lo invoco.
Bsicamente, cuando un procedimiento tiene parmetros por valor, al
momento de ser invocados los datos son pasados al subprograma en forma
de copia, es decir la maquina genera una nueva variable que toma una copia
del valor pasado.

Prof. Hugo Hernndez | Pgina 9 de 24

Teora de Subprogramas

Un parmetro definido del tipo por valor (ByVal), crea una copia del valor pasado, este
valor puede provenir por un valor colocado constantes, del valor almacenado por una
variable o el valor resultante de evaluar una expresin

Parmetros Por Referencia (ByRef)

En el caso de definir un parmetro por referencia, se debe emplear la palabra reservada


ByRef, esta declaracin significa que el Subprograma no solamente necesita el valor inicial
que posee la variable, sino que de ser modificado este parmetro, su valor resultante saldr
o se devolver al mdulo que lo invoc o llam (se establece como una Variable de Entrada
- Salida).
Un parmetro definido del tipo por Referencia (ByVal), al momento de invocarlo siempre
debe colocarse una variable, ya que las variables son los nicos elementos disponibles en un
computador para almacenar datos que pueden ser modificados.

Ahora bien, Cuando se estn definiendo los parmetros formales que va a


emplear en la generalizacin de un proceso, cmo saber si debe
declararlo del tipo por valor o por referencia?, para dar la respuesta a esta
interrogante, se debe analizar el procedimiento a generalizar en s y
preguntarse, El Mdulo necesita solo el valor inicial que posee el dato a
suministrarle o al finalizar las instrucciones a seguir en el procedimiento, se tiene que
modificar el valor pasado? Si la respuesta es solo necesita su valor, se definir como un
parmetro por valor, caso contrario ser del tipo por referencia.

Parmetros actuales
Son los parmetros que se escriben al momento de realizar la llamada o invocacin a un
subprograma, donde esta lista de variables, constantes o expresin sern los valores que van
a ser pasados a los parmetros formales del mdulo, tambin estos parmetros se le
denominan argumentos.
Al momento de invocar o llamar a un subprograma la lista de argumentos a colocar
siempre debe coincidir en cantidad y en tipo, segn estos fueron definidos formalmente en
el momento en que se dise dicho mdulo.

Cabe destacar, que este proceso de llamado se ha estado realizando desde el


curso anterior, pero empleando los procedimientos y funciones que estn
prediseados dentro del lenguaje, ej. cuando se determinaba una raz
cuadrada, o realizando una impresin por pantalla entre otras.
El caso particular de la raz cuadrada, es una funcin que se encuentra almacenada dentro
de la librera de funciones matemticas del lenguaje y es por ello que al momento de realizar
su llamado se escribe el prefijo Math. para luego nombrar la funcin sqrt(), al momento
de colocar su argumento el editor nos muestra un men contextual, que nos indica que esta
funcin requiere de un valor tipo Double, a su vez el editor nos informa que el valor a
Prof. Hugo Hernndez | Pgina 10 de 24

Teora de Subprogramas

devolver es la raz cuadrada de un nmero especificado siendo este un dato tipo Double
tambin (ver imagen).

Adicionalmente, el parmetro formar de la funcin no muestra en que forma est siendo


empleada, ya que el editor, los parmetros que son definidos por valor no muestra la
palabra reservada ByVal. Cuando hemos puesto en uso esta funcin, el argumento que
colocamos puede ser: un valor numrico constante, una variable que tiene almacenado un
valor tipo Double o dentro de su rango de trabajo, o el resultado de evaluar una expresin,
siempre y cuando el resultado de la evaluacin de la expresin nos genere un resultado
Double o que este en el rango de trabajo de este tipo de dato.
A continuacin se muestra un cdigo que muestras las muchas formas como se ha trabajado
la funcin de la raz cuadrada:

Por otro lado, la instruccin o procedimiento que se ha estado empleando para imprimir
mensajes al usuario por pantalla con o sin salto de pgina, tiene como ocurri en el caso de
la raz cuadrada, el uso de un llamado previo al nombre del procedimiento que en este caso
es el objeto consola o pantalla y es por eso que en su llamado se coloca el prefijo Console.
para luego nombrarla Write() o Writeline(), segn el tipo de impresin que se quiere
hacer. Ahora, en este caso el editor nos indique el procedimiento requiere un parmetro,
tipo String y al igual que el argumento que requiere recibir es del tipo por valor como
ocurri con la funcin raz cuadrada.

Prof. Hugo Hernndez | Pgina 11 de 24

Teora de Subprogramas

A continuacin veamos varias formas como se ha trabajado para imprimir un mensaje por
pantalla.

Hasta ahora no se han empleado procedimiento preestablecidos en VB2010 que tengan el


uso de un parmetro del tipo por referencia, sin embargo al momento en que trabajemos
con archivos de datos nos encontraremos con el procedimiento Input(), este procedimiento
nos va permitir extraer un dato de un archivo y esa informacin almacenarlo en una variable,
a continuacin se mostrar un ejemplo de cmo se realiza su llamado.

En este caso, observe que el segundo parmetro a requerir el procedimiento est definido
del tipo por referencia, por este motivo el editor nos habla de que el argumento es
obligatorio y es una variable, ya que en ella se asignar el valor ledo del archivo.
Si un parmetro es establecido del tipo por valor, el argumento a emplear
puede ser una variable, constante o expresin que tenga por respuesta el
mismo tipo de dato especificado. Pero para el caso de haber sido definida
como un parmetro por referencia, el argumento solo podr ser una
variable declarada del mismo tipo que el parmetro formal.

Llamado o invocacin de subprograma


Como vimos anteriormente, el proceso de llamado de subprogramas se ha venido realizando
desde el primer programa que hayamos desarrollado en Visual Basic, este llamado lo

Prof. Hugo Hernndez | Pgina 12 de 24

Teora de Subprogramas

hacemos de manera intuitiva al requerir el proceso, pero en trminos generales se ha estado


realizando de la siguiente forma cada vez que se necesita emplear un mdulo:
a) En el caso de ser un subprograma del tipo Procedimiento, el llamado se realiza en
forma de instruccin, es decir en una lnea separada de cualquier proceso previo o
posterior a realizar, empleando el nombre que se le dio al momento de realizar el
desarrollo del subprograma y entre parntesis se coloca los argumento que emplear
el mdulo (Variables, Constantes o Expresiones que debe recibir para que se
obtenga el proceso deseado en ese momento)
b) Por otro lado, de ser un subprograma del tipo funcin, estas se comportan en forma
similar a una variable, es decir su llamado se encuentra dentro de una expresin,
siempre y cuando el tipo de dato obtenido coincida con el tipo de expresin a
desarrollar (Expresin Aritmtica, Lgica o de Cadena).
Nunca se debe invocar un subprograma tipo Procedimiento dentro de una
expresin ya que estos no devuelven resultados sino realizan una actividad.
En el caso de las Funciones, si el llamado se requiere en una expresin de
asignacin est se realiza del lado derecho de la expresin.
No olvide que al colocar los argumentos en el llamado de un subprograma, la
cantidad de argumentos debe coincidir a los definidos formalmente, deber ser
del mismo tipo y que estos cumplan con las definiciones dadas para su uso.

Ejemplos demostrativos del proceso de modulacin y llamado de


subprogramas
Hasta los momentos hemos desarrollado la teora de subprogramas y la puesta a prueba del
mismo se ha empleado los mdulos preestablecidos en el lenguaje, por este sentido para
entender el proceso de modulacin de un programa, desarrollaremos primeramente un
ejercicio diseando la aplicacin de la manera como se trabaj en programacin I, para
posteriormente modularla y plantearemos un segundo ejercicio donde nos indique algunos
subprogramas a desarrollar para posteriormente construir la aplicacin.
Ejercicio 1 rea de un tringulo

Elabore una aplicacin en VB2010 bajo consola que dada la base y la altura de un tringulo
determine e imprima el rea del tringulo.
Como ya todos sabemos lo primero que debemos hacer para desarrollar un programa es el
anlisis del problema que consiste en responder tres preguntas:

Qu informacin disponemos para insertar datos en l programa?, Datos de


entrada.
En este caso tenemos la informacin de la Base (b) y la Altura (h) de un tringulo.

Qu informacin deseo que el programa me determine o muestre?, Datos de


salida.
El fin que tendr el programa es el de determinar el rea del tringulo (a).
Prof. Hugo Hernndez | Pgina 13 de 24

Teora de Subprogramas

Cul es el procedimiento que debe seguir la mquina para lograr obtener los
resultados deseados?, Proceso a desarrollar.
Sabemos que el programa tendr una estructura conocida como E P S, se solicitan
las Entradas de los datos, el siguiente paso es el de desarrollar los Procesos de
clculo, comparacin o desarrollo para obtener los resultados esperados y
finalmente mostrar o imprimir los resultados obtenidos (Salidas), en este caso en
particular seria:
-

Lectura de los datos b, h.

Determinacin del rea del tringulo a, donde como ya conocemos se determina


como:

Imprimir el valor de rea (a)

A continuacin se muestra el cdigo formado a partir del anlisis previo realizado y los
resultados que se obtiene considerando a un tringulo que presenta las siguientes
caractersticas:
Base=12 uL
Altura= 5 uL
Donde, uL significa unidades de longitud.

'
'
'
'

Escenario: Aplicacin que determina el rea de un tringulo al que


se le conoce el valor de su base y altura
Elaborado por: Prof. Hugo Hernndez
Versin: 1.1
Fecha: 08/06/2014

Module Module1
Sub Main()
' Declaracin de variables
' Variables de entrada
Dim b As Single
Dim h As Single
' Variables de salida
Dim a As Single
' Proceso de lectura
Console.Write("Inserte el valor de la base del tringulo: ")
b = Console.ReadLine()
Console.Write("Inserte el valor de la Altura del tringulo: ")
h = Console.ReadLine()
' Determinacin del rea del tringulo
a = b * h / 2

Proceso
de
lectura

Calculo del rea

' Impresin de resultados


Console.WriteLine("El rea del tringulo es: "& a)
Console.ReadKey()
End Sub
End Module

Prof. Hugo Hernndez | Pgina 14 de 24

Teora de Subprogramas

Resultados obtenidos

Ahora observando el cdigo desarrollado, notamos que en el proceso de lectura se realiza


dos veces los pasos para realizar la lectura de los datos tipo Single, b y h, de hecho cada vez
que se necesite leer un dato tipo Single por teclado o de cualquier tipo se realiza la
impresin de un mensaje para luego leer la variable a almacenar en memoria. Entonces
porque no desarrollar un subprograma que se encargue de realizar este proceso por
nosotros, en este sentido analicemos como sera el proceso a modular.
 Anlisis de un subprograma que realiza la lectura por pantalla de una variable tipo
Single.
Al igual que en el caso de desarrollar un programa, a los subprogramas se les debe realizar
su anlisis, pero con la diferencia que este anlisis no est basado en trminos que debe
suministrar el usuario y que quiere como respuesta del mismo, sino el anlisis es en base al
proceso en s a modular. Es por ello que las preguntas a contestar ser:

El proceso a generalizar, Qu datos requiere tener para poder este realizar el


objetivo planteado?
En base a la actividad de lectura como podemos observar esta necesita conocer que
mensaje se le va a emitir al usuario. Ej. Inserte el valor de la base del
tringulo

El objetivo a generalizar, Qu actividad o resultados debe desarrollar?


La actividad de tomar un dato suministrado por teclado y almacenarlo en una
variable. Ej. b

Qu pasos debe llevar a cabo el subprograma para lograr el objetivo planteado?


Emitir un mensaje y capturar el valor suministrado por el usuario.

Otra forma de ver el anlisis es de la siguiente manera grfica.


Mensaje

SubPrograma (SP)
Lee un dato por teclado tipo single

Dato
(Single)

Prof. Hugo Hernndez | Pgina 15 de 24

Teora de Subprogramas

De ahora en adelante la forma de desarrollar el anlisis del subprograma, lo


desarrollaremos de manera grfica y no en forma de respuesta a las
interrogantes establecidas previamente, pero hay que entender el la
informacin que se muestra en el grafico proviene de la respuesta a estas.
Como se puede observar el subprograma que necesitamos desarrollar tiene como propsito
devolver un valor ledo, esto significa que se puede desarrollar tanto como un procedimiento
o como una funcin, sin embargo ya que se va es a desarrollar una actividad de lectura
vamos a construir el subprograma del tipo procedimiento y posteriormente se mostrar
cmo se trabajara este subprograma si se hubiese desarrollado del tipo funcin.
Continuando con el mismo orden de ideas, evaluando la forma en que trabajara el
subprograma, el mdulo a desarrollar tiene como entrada el mensaje a mostrar al usuario,
dicho mensaje debe ser el mismo al finalizar la actividad por ello este debe ser un parmetro
del tipo por valor, en cambio el dato a leer, es un valor que se desea salga del subprograma
o se modifique el parmetro que se coloque como argumento, por ello este parmetro debe
funcionar del tipo por referencia.
A continuacin se muestra la manera como se construye el subprograma planteado:

Observe que las instrucciones a desarrollar por el subprograma son las


mismas que se emplearon cuando se desarroll el programa de manera
secuencial, pero con la diferencia que no se escribe un mensaje en
concreto o variable a leer, sino que se emplean los nombres que se le
establecieron en la lista de parmetros.
Ahora, ya que se desarroll el mdulo del tipo procedimiento, al momento se requerir el uso
del mismo, se llama por su nombre como una instruccin ms del cdigo a generar con la
informacin que en el caso se requiera.
Recuerde que el mensaje se define como del tipo por valor, significa que se puede pasar una
variable que contenga el mensaje a mostrar, una constante literal o una expresin de
cadena. En cambio, para el dato a leer, el argumento debe ser una variable.
Note que este mdulo, a pesar de ser desarrollado por nosotros el editor nos muestra la
misma ayuda que ocurra cuando emplebamos los procedimientos o funciones
preestablecidos en el lenguaje.

La siguiente modulacin que se puede establecer al programa es la determinacin del


clculo del rea del tringulo, como se puede imaginar, esta actividad puede ser requerida
en otros aplicaciones o programas, ya que en trmino del programa a desarrollar se requiere
una solo vez en el desarrollo del mismo.
Prof. Hugo Hernndez | Pgina 16 de 24

Teora de Subprogramas

 Anlisis de un subprograma que determina el rea de un tringulo, a partir de la


informacin de la base y su altura.
Base
Altura

SubPrograma (SP)
Determina el rea del tringulo

Area

En este caso, podemos observar que nuevamente el mdulo a desarrollar puede ser
construido tanto como un procedimiento o una funcin, pero a diferencia que el caso
anterior, el proceso a generalizar, est orientado a realizar un clculo por ello se crear
como una funcin. Hay que recordar que una funcin devuelve el resultado con su nombre y
en este caso su resultado ser un valor tipo Single o real, por ello los parmetros que se
requieren son dos, la base y la altura del tringulo, de estos parmetros el proceso solo
requiere conocer cul es su valor inicial, y no se quiere que estos se modifiquen, por ello se
van a definir como parmetros del tipo por valor.
A continuacin se muestra el subprograma a construir

Al momento de requerir calcular el rea del tringulo, por ser este del tipo funcin, su
llamado se efecta dentro de una expresin, ej. en la expresin que se requiere para
asignarle el valor a la variable que guarde el rea, en este caso, la variable a, y los
argumentos que se emplean pueden ser una variable, constante o expresin que devuelva o
almacene un dato tipo Single.
A continuacin se presenta el Cdigo desarrollado con el empleo de los subprogramas antes
discutidos.
'
'
'
'
'

Escenario: Aplicacin que determina el rea de un tringulo al que


se le conoce el valor de su base y altura. Desarrollada de forma modulada
Elaborado por: Prof. Hugo Hernndez
Versin: 1.2
Fecha: 10/06/2014

Module Module1
' Subprograma que lee por teclado un dato tipo single
Sub LeerDatoSingle(ByVal Mensaje As String, ByRef ValorLeido As Single)
Console.Write(Mensaje)
ValorLeido = Console.ReadLine()
EndSub
' Subprograma que determina el rea de un tringulo a partir de su
' base y la altura
Function AreaTriangulo(ByVal Base As Single, ByVal Altura As Single) As Single
AreaTriangulo = Base * Altura / 2
EndFunction
Sub Main()
' Declaracin de variables
' Variables de entrada
Dim b AsSingle

Prof. Hugo Hernndez | Pgina 17 de 24

Teora de Subprogramas

Dim h As Single
' Variables de salida
Dim a As Single
' Proceso de lectura
LeerDatoSingle("Inserte el valor de la base del tringulo: ", b)
LeerDatoSingle("Inserte el valor de la Altura del tringulo: ", h)
' Determinacin del rea del tringulo
a = AreaTriangulo(b, h)
' Impresin de resultados
Console.WriteLine("El rea del tringulo es: "& a)
Console.ReadKey()
End Sub
End Module

Alteraciones que se pueden plantear al programa desarrollado:


1) Al momento de definir las variables se puede omitir la declaracin de a, ya que como
tal esta variable tiene como finalidad almacenar el resultado del rea, la cual se
determina empleando la funcin AreaTriangulo. Se emplearse esta modificacin
significara que al momento de imprimir el resultado del rea, el valor se obtendr
como consecuencia del llamar a la funcin directamente, como se muestra a
continuacin.
' Procedimientos previos
' Impresin de resultados
Console.WriteLine("El rea del tringulo es: "& AreaTriangulo(b, h))
Console.ReadKey()
' Procedimientos posteriores a ejecutar

2) Como se coment anteriormente, el subprograma que lee un dato tipo simple se


pudo desarrollar como una funcin en vez de un procedimiento, de ser as, estamos
hablando que solo requiere un parmetro de entrada, correspondiente al mensaje a
mostrar al usuario y sta funcin nos devolvera un dato tipo Single, quedando de la
siguiente manera:

Ahora en el momento de realizar la lectura el proceso a seguir seria el siguiente:

Como podemos notar, la funcin TomarDatoSingle(), representara un


mejoramiento de la funcin Console.ReadLine() en el sentido que se puede
emitir el mensaje al usuario referente a que dato se est solicitando.

Prof. Hugo Hernndez | Pgina 18 de 24

Teora de Subprogramas

Ejercicio 2 Determinacin de la Combinatoria de N en M

En el ejercicio1, partimos del hecho de modular un archivo que primeramente se desarrolla


de manera estructurada para posteriormente aplicarle las modulaciones pertinentes al caso.
En el curso la forma en presentarse los ejercicios realmente vendrn planteados de la
siguiente manera:
a) El enunciado de la aplicacin que se desea desarrollar y luego se enumeran los
diferentes subprogramas que mnimo se deben construir para dar respuesta al
ejercicio
b) Se listan los diferentes subprogramas a desarrollar para posteriormente describir el
enunciado de la aplicacin a desarrollar.
Para este caso, plantearemos la pregunta de la forma a, mostrada previamente.
Elabore un aplicacin bajo consola en Visual Basic 2010, que dado dos valores enteros, N y
M, donde N representa la cantidad de elementos disponibles y M es la cantidad de
elementos distintos que se van a combinarse. Determine e imprima, el valor de la
combinatoria de N en M
siguientes subprogramas:

. Para desarrollar la aplicacin se debe construir y utilizar los

1) Un subprograma que dado un valor entero y positivo (N), determine el valor del
factorial de N (N!). Recuerde que l factorial de N se determina como la productoria
de todos los nmeros naturales del 1 hasta el N. Por otro lado, ya que el factorial de
un nmero crece de manera muy rpida, coloque que este valor es un resultado del
tipo real.
2) Un subprograma que dado dos valores enteros y positivos, N y M, donde se tiene que
cumplir que N>=M, determine la combinatoria de N en M
determinar la combinatoria es la siguiente:

. La expresin para

3) Un subprograma que dado la cadena de caracteres que contiene un mensaje a


mostrar al usuario, realice la lectura de un dato tipo entero (Integer)
 Anlisis del subprograma qu determine el factorial de un nmero.
N

SubPrograma (SP)
Determina el Factorial de N

Factorial

Segn nuestro anlisis el tipo de subprograma que se va a desarrollar es una funcin debido
a que solo se quiere determinar el factorial de N, siendo este resultado un dato del tipo Real,
como se est establecido en el enunciado ej. Single.
Por otro lado, nos encontramos que la determinacin del factorial de un nmero es un poco
ms largo el procedimiento a realizar, que en el caso del desarrollo del rea de un tringulo
el cual fue evaluar una expresin. Ya que se tiene que desarrollar una productoria, implicara
que su determinacin requiere de una estructura cclica, as como de un acumulador.

Prof. Hugo Hernndez | Pgina 19 de 24

Teora de Subprogramas

El acumulador a implementar, est orientado a almacenar la productoria a calcular, por este


motivo el valor con que se va a inicializar ser en uno, y este variable es local al subprograma
a desarrollar es decir, solo existe en el momento que se est ejecutando en el subprograma.
A continuacin se presenta el desarrollo de dicha funcin.

 Anlisis del subprograma que determina la combinatoria de N en M.


SubPrograma (SP)
Determina el la combinatoria de N en M

N, M

Combinatoria

Nuevamente por lo observado en el anlisis desarrollado, el subprograma a construir es una


funcin, y esta al igual que ocurri en el caso del rea del tringulo, si se determina
evaluando una expresin. Sin embargo, la expresin a evaluar requiere la determinacin de
distintos factoriales el del valor de N, M y la diferencia entre N y M (N M).
De no haber construido la funcin del factorial, el proceso a seguir requera desarrollar
primero los factoriales y despus evaluar la expresin. En nuestro caso resulta es invocar el
subprograma del factorial tres veces, una para cada factorial necesario a utilizar.
A continuacin se muestra la funcin ya desarrollada.

Observe que los parmetros actuales, como ya se ha venido comentando en el


documento es el que le indica a la funcin con que valores va a trabajar, en un
caso con N, en otro con M y el ltimo con el resultado de evaluar N M, este
ltimo caso es posible gracias al hecho de haber sido declarado como un
parmetro por valor.
 Anlisis del subprograma que lee un dato tipo Integer.
Mensaje

SubPrograma (SP)
Lee un dato por teclado tipo Integer

Dato
(Integer)

Como se dijo en el anlisis que se realiz en el subprograma que lea un dato por teclado
tipo Single, este se puede construir tanto en forma de funcin as como un procedimiento.
La construccin del mismo lo realizaremos como un procedimiento quedando de la siguiente
manera:

Prof. Hugo Hernndez | Pgina 20 de 24

Teora de Subprogramas

Finalmente, al momento de crear el procedimiento a seguir la mquina para desarrollar la


aplicacin solicitada, efectuamos el siguiente anlisis del problema:

Qu informacin disponemos para insertar datos en l programa?, Datos de


entrada.
Los valores de N y M (Valores enteros y positivos, donde N>=M)

Qu informacin deseo que el programa me determine o muestre?, Datos de


salida.
La combinatoria de N en M

Cul es el procedimiento que debe seguir la mquina para lograr obtener los
resultados deseados?, Proceso a desarrollar.

El seudocdigo que debemos seguir sera el siguiente:

Leer los valores de N y M, y para evitar problemas de clculo, este proceso se


realizar dentro de un ciclo que se repita hasta que el valor de N suministrado por el
usuario ser mayor o igual a M.

Determinamos el valor de la combinatoria de N en M y

Finalmente, imprimimos el resultado por pantalla.

A continuacin se presenta el cdigo desarrollado para dar respuesta al problema:


'
'
'
'

Escenario: Aplicacin que determina la combinatoria de N en M


Elaborado por: Prof. Hugo Hernndez
Versin: 1.1
Fecha: 12/06/2014

Module Module1
' Funcin que determina el factorial de un Nmero
Function Factorial(ByVal N AsInteger) As Single
' Variable local
Dim F As Single = 1
' NOTA: Solo se puede inicializar si es la nica variable declarada
For I = 2 To N
F = F * I ' Pudo colocarse el operador combinado *=, es decir, F *= I
Next
Factorial = F
End Function
' Funcin que determina la combinatoria de N en M
Function Combinatoria(ByVal N As Integer, ByVal M As Integer) As Single
Combinatoria = Factorial(N) / (Factorial(M) * Factorial(N - M))
End Function

Prof. Hugo Hernndez | Pgina 21 de 24

Teora de Subprogramas

' Procedimiento que lee un dato tipo Integer


Sub LeerDatoInteger(ByVal Mensaje As String, ByRef ValorLeido As Integer)
Console.Write(Mensaje)
ValorLeido = Console.ReadLine()
EndSub
' Procedimiento de arranque el programa
Sub Main()
' Declaracin de variables
' Variables de entrada
Dim N, M AsInteger
' Variables de Salida
Dim Comb As Single
' Proceso de lectura de forma validada (N>=M)
Do
LeerDatoInteger("Introduzca el valor de N: ", N)
LeerDatoInteger("Introduzca el valor de M: ", M)
If M > N Then
Console.WriteLine("Error de entrada, el valor de M debe ser menor o
igual a N")
Console.ReadKey()
' Procedimiento que borra la informacin mostrada en pantalla
Console.Clear()
End If
Loop Until N >= M
' Calculo de la combinatoria
Comb = Combinatoria(N, M)
' Impresin de resultados
Console.WriteLine("El valor de la combinatoria de "& N &" en "& M &
" es: "& Comb)
Console.ReadKey()
End Sub
End Module

Otra manera como se pudo haber construido la aplicacin es que en vez de


obligar al usuario a suministrar los datos de manera correcta (N>=M), validar el
clculo primer antes de imprimir la solucin y en caso de no se cumpla la
condicin, se imprimir un mensaje, indicando que el clculo no puede ser
realizado. A continuacin se presenta como se modificara este cdigo

Prof. Hugo Hernndez | Pgina 22 de 24

Teora de Subprogramas

La puesta a prueba de este programa se realizar en el siguiente punto a tratar.

Prof. Hugo Hernndez | Pgina 23 de 24

Teora de Subprogramas

Bibliografa
 Alcala N., Introduccin a Visual Basic6.0, Instituto politcnico Santiago Mario,
Valencia Venezuela, 2002.
 Garca Javier y otros, Aprenda Visual Basic 6.0 como si estuviera en primero,
Universidad de Navarra, San Sebastin Espaa, 1999.
 Gua
de
programacin en
Visual Basic,
Versin:
Visual
Studio
2010,(http://msdn.microsoft.com/es-es/library/y4wf33f0%28v=vs.100%29.aspx), Revisado
el Junio 2014.
 Hernndez H., Procedimientos, Universidad de Carabobo, Brbula Venezuela,
2012.
 Material Instruccional del Curso Computacin II, Subprogramas en Pascal, Prof.
Fernndez Manuel 2000, Universidad de Carabobo- Venezuela.
 Pacheco L., Sub Programas en Visual Basic, Universidad de Carabobo, Valencia
Venezuela, 2013.

Prof. Hugo Hernndez | Pgina 24 de 24