conjunto de lneas de cdigo que luego puede ser llamado por el programa en cualquier punto y en cualquier momento. No devuelve valores a no ser que se especifique un parmetro por referencia ByRef. La sintaxis es como sigue:
mbito: el procedimiento puede ser Private.- donde se puede llamar solamente en el mdulo dnde se est ejecutando Public.- donde se puede llamar desde cualquier mdulo y static. Static.- conserva sus valores una vez terminada su ejecucin Nombre del procedimiento: es el nombre que identifica al procedimiento. Parmetros: son los parmetros que se pueden pasar al procedimiento.
Veamos un ejemplo prctico. A continuacin declararemos un procedimiento y lo llamaremos desde el programa principal. No le pasaremos ningn parmetro por el momento. Este procedimiento llamado suma, sumar 2 variables y mostrar por pantalla el resultado.
Las subrutinas tienen un principio y un fin y estas pueden tener distinto tipo de alcance, o sea pueden ser de tipo private, pblic o static. Procedimiento Esttico Para que las variables de un procedimiento se conserven una vez terminada su ejecucin, ste debe definirse como Esttico: Static Sub Procedimiento(Argumento1,Argumento2,.....) [Sentencias] End Sub La sentencia Sub y End Sub son obligatorias al definir cualquier procedimiento. Los argumentos y las sentencias Private, Public y Static son opcionales. Es importante mencionar que al definir un procedimiento sin ninguna de las sentencias anteriores, por defecto ste se define como Pblico, es decir: Sub Procedimiento(argumento1,argumento2,.....) [Sentencias] End Sub Es equivalente a :
Public Sub Procedimiento(argumento1,argumento2,.....) [Sentencias] End Sub
Existe una instruccin que permite terminar la ejecucin de un procedimiento, sta es la instruccin Exit Sub. Por ejemplo, si tenemos el siguiente procedimiento:
Sub Procedimiento(argumento1,argumento2,.....) [Sentencias] Exit Sub [Sentencias] End Sub
Module Module1 Sub Main() suma() Console.ReadLine() End Sub
Private Sub suma() Dim i As Integer Dim x As Integer Dim resu As Integer i = 5 x = 21 resu = x + i Console.Write(resu) End Sub
End Module PARMETROS EN VISUAL BASIC
Parmetro: datos que son pasados cuando se llama a una funcin o procedimiento. Son datos que son sustituidos por los argumentos y variables reales que los invocan.
Ejemplo:
Sub Raiz (N As Double, F As Double) '- En este caso tenemos 2 parmetros If N < 0 Then Exit Sub 'Se mandara un mensaje de error Else F = Sqr(N) End If End Sub
Call Raiz(N, F) '.. En este caso tenemos 2 argumentos, que se sustituyen Raiz(N,F)
Los argumentos son un lista de constantes, variables o expresiones separadas por comas que son pasadas a la funcin. En principio, el nmero de argumentos debe ser igual al nmero de parmetros de la funcin. Los tipos de los argumentos deben coincidir con los tipos de sus correspondientes parmetros, de lo contrario puede haber fallos importantes en la ejecucin del programa.
Bien, que tal si ahora le pasamos un parmetro. el siguiente programa suma 6 variables y la suma se la pasa a un procedimiento que calcula el promedio y luego imprime el resultado. Deben saber que el procedimiento no devuelve el resultado final al programa principal, solo calcula el promedio y lo imprime. ya pronto veremos cmo devolverle un valor al programa Main.
Module Module1 Sub Main() Dim a, b, c, d, e, f, suma As Integer a = 12 b = 54 c = 34 d = 65 e = 34 f = 23 suma = a + b + c suma1= d + e + f calcula_promedio(suma,suma1) Console.ReadLine() End Sub
Private Sub calcula_promedio(ByVal p_suma, ByVal p_suma1) Dim promedio As Double promedio =(p_suma+ p_suma) / 6 Console.WriteLine(" el promedio es {0}", promedio) End Sub
End Module Ahora veremos cmo hacer que nuestro procedimiento le devuelva un valor al programa Main y sea ste quien lo imprima por pantalla.
Module Module1 Sub Main() Dim a, b, c, suma As Integer Dim promedio As Double a = 9 b = 54 c = 36 suma = a + b + c calcula(suma, promedio) promedio= promedio +a Console.WriteLine("El promedio es: {0}", promedio) Console.ReadLine() End Sub Private Sub calcula_promedio(ByVal su, ByRef pro) pro = su / 6 End Sub
End Module
Module Module1 Sub Main() Dim a, b, c, suma As Integer Dim promedio As Double = 9 a = 3 b = 6 c = 9 suma = a + b + c calcula(suma, promedio) ' regresa 9 promedio = promedio + a 'promedio le suma 3 Console.WriteLine("El promedio es: {0}", promedio) 'Imprime 12 Console.ReadLine() End Sub
Private Sub calcula(ByVal su, ByRef pro) su = su + pro pro = su / 3 End Sub End Module
Con la palabra clave ByRef, le decimos al procedimiento que el valor que recibir en ese parmetro, deber devolverlo a la llamada desde el programa principal.
Existen 2 tipos de parmetros, POR VALOR y POR REFERENCIA: EJEMPLOS:
POR VALOR
Ejemplo: Module Module1 Sub Main() Dim dato1 As Integer
Sub miProcedimiento(ByVal X As Integer) ' Calculamos el doble de X X = X * 2 MsgBox(X) End Sub End Module POR REFERENCIA
Ejemplo: Module Module1 Sub Main() Dim dato1 As Integer
dato1 = 1000 ' Call miProcedimiento(dato1) miProcedimiento(dato1) MsgBox(dato1) End Sub
Sub miProcedimiento(ByRef X As Integer) ' Calculamos el doble de X X = X * 2 MsgBox(X) End Sub End Module
La nica diferencia entre estos 2 ltimos ejemplos es la palabra reservada ByVal
Module Module1 Cuadratica con subrutina Sub Main() Dim prueba As Double Dim a, b, c, x1, x2 As Integer Console.WriteLine("teclee a") a = Console.ReadLine() Console.WriteLine("teclee b") b = Console.ReadLine() Console.WriteLine("teclee c ") c = Console.ReadLine() prueba = b * b - (4 * a * c) If (prueba < 0) Then Console.WriteLine("El resultado esta en los numeros complejos") Console.ReadLine() End End If calcula(a, b, c, x1, x2) Console.WriteLine("El valor de x1 {0:F2} ", x1) Console.WriteLine("El valor de x2 {0:F2} ", x2) Console.ReadLine() End Sub Private Sub calcula(ByVal a, ByVal b, ByVal c, ByRef x1, ByRef x2) Dim raiz As Double raiz = Math.Sqrt((b * b) - 4 * a * c) x1 = (-b + raiz) / (2 * a) x2 = (-b - raiz) / (2 * a) End Sub End Module
Module Module1 Cuadratica con subrutina entrada,proceso,salida Sub Main() Dim prueba As Double Dim a, b, c, x1, x2 As Integer entrada(a, b, c) prueba = b * b - (4 * a * c) If (prueba < 0) Then Console.WriteLine("El resultado esta en los numeros complejos") Console.ReadLine() End End If Proceso(a, b, c, x1, x2) Salida(x1, x2) Console.ReadLine() End Sub Private Sub Entrada(ByRef a, ByRef b, ByRef c) Console.WriteLine("teclee a") a = Console.ReadLine() Console.WriteLine("teclee b") b = Console.ReadLine() Console.WriteLine("teclee c ") c = Console.ReadLine() End Sub Private Sub Proceso(ByVal a, ByVal b, ByVal c, ByRef x1, ByRef x2) Dim raiz As Double raiz = Math.Sqrt((b * b) - 4 * a * c) x1 = (-b + raiz) / (2 * a) x2 = (-b - raiz) / (2 * a) End Sub Private Sub Salida(ByVal x1, ByVal x2) Console.WriteLine("El valor de x1 {0:F2} ", x1) Console.WriteLine("El valor de x2 {0:F2} ", x2) End Sub End Module FUNCIONES Una funcin es un contenedor que guarda un conjunto de lneas de cdigo que luego puede ser llamado por el programa en cualquier punto y en cualquier momento. Las funciones devuelven un solo valor sobre su nombre.
<Ambito> Function<Nom de la funcin>(<parmetros>) as <Tipo de Dato> <Sentencias> Nombre de la funcin =Valor End Sub
mbito: la funcin puede ser: Private, donde puede se puede llamar solamente en el mdulo dnde se est ejecutando y Public donde se puede llamar desde cualquier mdulo, tambin puede ser Static. Nombre del la funcin: es el nombre que identifica a la funcin. Parmetros: son los parmetros que se pueden pasar a la funcin. Tipo de Dato: es el tipo de dato que la funcin puede tomar, como ser, Boolean, Integer, Double, etc.
Continuando con el ejemplo anterior, esta vez usaremos una funcin para realizar el ejercicio.
Module Module1 Sub Main() Dim a, b, c, d, e, f, suma As Integer a = 16 b = 24 c = 25 d = 15
suma = a + b + c + d Console.WriteLine("El promedio es: {0}", calcula(suma)) Console.ReadLine() End Sub Private Function calcula(ByVal su) As Double calcula = su / 4 End Function End Module
Module Module1 Private Function AreaCirculo(ByVal Radio As Double) As Double AreaCirculo = Radio * Radio * 3.1415 End Function Private Function LongitudCirculo(ByVal Radio As Double) As Double LongitudCirculo = Radio * 2 * 3.1415 End Function
Sub Main() Dim Radio As Double Console.WriteLine("Clculo del rea y longitud de un circulo") Radio = Console.ReadLine Console.WriteLine("Area de radio {0} es {1} ", Radio, AreaCirculo(Radio)) Console.WriteLine("Longitud radio {0} es {1} ", Radio, LongitudCirculo(Radio)) Console.ReadKey() End Sub End Module
Module Module1 Sub Main() Dim a, b, c, d, suma As Integer a = 16 b = 24 c = 25 d = 15 suma = a + b + c + d Dim calc As Double = calcula(suma) Console.WriteLine("El promedio es: {0}", calc) Console.ReadLine() End Sub Private Function calcula(ByVal su) As Double calcula = su / 4 End Function End Module
Flujos de Entrada Y Salida De Consola En Visual Basic.Net y 2005
En este post hablare de los flujos de entrada y de salida en Consola, todo el cdigo est escrito para Visual Basic.Net o Visual Basic 2005. Los flujos de Entrada son los siguientes: System.Console.Read() System.Console.Readline() Cul es la diferencia entre el Read y el Readline? Que el Readline lee toda una lnea de texto mientras para el Read podemos usar conversiones para que leamos por ejemplo son un carcter. Los flujos de Salida son los siguientes: System.Console.Writeline() System.Console.Write() Estos mtodos se ocupan de la siguiente manera: System.Console.Writeline(La programacin es lo mejor) System.Console.Write (La programacin es lo mejor) Cul es la diferencia entre el Writeline y el Write? Bueno la diferencia es que el Write escribe y no pasa a la lnea siguiente, mientras que Writeline escribe toda la lnea pasando a la lnea siguiente un ejemplo es el siguiente: Dim Nombre as String System.Console.Writeline(Digite Su Nombre: ) Nombre = System.Console.Readline Entonces esto a nivel de consola quedara as: Digite Su nombre: Jose Benjamin Zepeda Portillo Mientras que si ocupo el Write seria as: Dim Nombre as String System.Console.Write (Digite Su Nombre: ) Nombre = System.Console.Readline Tomando la variable nombre el String = Jose Benjamin Zepeda Portillo Entonces esto a nivel de consola quedara as: Digite Su nombre: Jose Benjamin Zepeda Portillo Tomando la variable nombre el String = Jose Benjamin Zepeda Portillo Qu son los flujos de salida con formato? Un flujo con formato no sera ms que el siguiente ejemplo: Dim Nombre as String = Benjamin
Dim Edad as Byte = 21
Dim Apellido as String = Zepeda
System.Console.Writeline(Su nombre completo es: {0} {1} y tiene {2} aos ,Nombre, Apellido, Edad) Entonces esto a nivel de consola quedara as: Su nombre completo es: Benjamin Zepeda y tiene 22 aos de edad *Es de recordar que el orden debe ser el mismo, si le hemos aplicado al corchete {0} {1} entonces la primer variable ira en el puesto 0, la segunda variable en el puesto 1 y as sucesivamente. Entonces: Posicin: Posicin 0,1,2 y as sucesivamente. Ancho (Opcional): Mnimo Numero de posiciones para la salida, pero si el ancho se omite entonces o especificamos un valor mximo entonces el ancho incrementa automticamente. Tipo (Opcional): Es uno de los caracteres mostrado en la tabla de abajo. Decimales (Opcional): Aqu se especifica el nmero de dgitos a mostrar en el caso de enteros o de decimales en el c
aso de fraccionarios. Cuando este se especifica se escribe a continuacin de tipo, sin espacios en blanco.
InputBox A travs de la funcin InputBox es posible manipular la entrada de datos por parte del usuario, pudiendo almacenar en una variable los datos ingresados por este.
Tipos de Datos Los tipos de datos numricos en Visual Basic .NET se agrupan en dos categoras: enteros y de punto flotante.
Numricos a su vez se agrupan en, Byte, Short, Integer y Long. Byte ocupar solamente 1 byte y nos permitir guardar un nmero que est entre 0 y 255. Punto flotante son Single y Double. Char almacenan un slo caracter en formato Unicode. String almacenan una secuencia de caracteres Unicode
Imports System.IO Module Module1 Sub Main() Dim N As Integer N = 0 'Declara a N de tipo Objeto no de tipo entero N = InputBox("Ingrese Un Numero ") MsgBox("1 El Numero es " & N) MsgBox("2 El Numero es " & N.ToString) End Sub End Module
Imports System.IO Module Module1 Sub Main() Dim cantidad As Integer Dim numero, suma As Integer cantidad = InputBox("Con cuntos nmeros desea trabajar?", "Mdulo de suma") For cantidad = 1 To cantidad numero = InputBox("Digite nmero " + Str(cantidad), "Digite nmeros") suma = suma + numero Next MsgBox("El resultado de la suma es " + Str(suma)) End Sub End Module
ARREGLOS Son variables que permiten almacenar un conjunto de datos del mismo tipo a la vez.
Si se quiere almacenar nombre y edad de 15 personas, con el mtodo tradicional se ocuparan 30 variables o 30 componentes visuales, y solo es nombre y edad de 15 personas, agregar ms datos y ms personas y ya es tiempo de empezar a analizar otro tipo de variables y de componentes.
VECTORES Bueno, ahora veremos cmo declarar y usar arreglos. Comenzaremos con los vectores, la forma de declararlos es la siguiente:
Dim Transportes(3) As String
Recuerden que el ndice de los arreglos parte en cero, por lo que un arreglo como ste, declarado de 3 posiciones, en realidad tiene 4 elementos (0, 1, 2, 3).
Si deseamos inicializar los elementos del vector, no debemos declarar la dimensin del vector. Lo hacemos de la siguiente manera.
Dim vector() As Integer = {0, 1, 2, 3, 4, 5}
Option Strict On ' Mas adelante en este apunte explica que es ' exige que nuestro cdigo este correcto ' Option Strict Off vb puede aceptar cdigo incorrecto Module Example
For i As Integer = 0 To array.Length-1 Console.WriteLine(i) Next
End Sub
End Module
Ahora veremos cmo llenar el vector con un ciclo FOR que le pide al usuario ingresar los elementos, y luego los mostraremos por pantalla:
Module Module1
Sub Main() 'llenamos el vector con elementos ingresados por teclado Dim vector(5) As Integer For i = 0 To 5 Console.WriteLine("ingrese un numero para el indice {0}", i) vector(i) = Console.ReadLine Next
'recorremos el vector y mostramos su contenido For i = 0 To 5 Console.Write(vector(i)) Next Console.ReadLine() End Sub
End Module
Ahora les mostrar como dimensionar un vector en tiempo de ejecucin, haciendo que el usuario introduzca la cantidad de elementos que el vector tendr:
Module Module1
Sub Main() Dim cantidad As Integer Console.WriteLine("cuantos elementos tendra el vector?") cantidad = Console.ReadLine()
'restaremos 1 a la cantidad ingresada por el usuario porque si el ingresa 5 'el vector tendra 6 elementos, y el usuario quiere 5 solamente.
cantidad = cantidad - 1 'ahora declaramos el vector con la dimension ingresada por el usuario
Dim vector(cantidad) As Integer
For i = 0 To cantidad 'llenamos el vector de elemntos Console.WriteLine("ingrese un numero para el indice {0}", i) vector(i) = Console.ReadLine Next
'recorremos el vector y mostramos su contenido For i = 0 To cantidad Console.Write(vector(i)) Next Console.ReadLine() End Sub
End Module
Y qu tal si queremos llenar un vector con elementos randmicos?, pues lo hacemos de la siguiente manera:
Module Module1
Sub Main() Dim random As New Random Dim i As Integer Dim vector(5) As Integer
'llenamos el vector con numneros al azar comprendidos entre 1 y 100 For i = 0 To 5 vector(i) = random.Next(1, 100) Next
'imprimimos el vector For i = 0 To 5 Console.Write(vector(i)) Console.Write("-") Next Console.ReadLine() End Sub
End Module
ORDENAR UN VECTOR Bueno, ordenar un vector es una tarea bastante recurrente en los centros de estudio. Pues bien, Visual basic nos facilita el trabajo entregndonos una clase que lo hace por nosotros, pero tambin podemos usar el clsico mtodo de ordenamiento conocido como "La burbuja". A continuacin ambas posibilidades, primero la clase de visual y luego la burbuja:
Array.Sort(vector)
For k = 1 To n 'mtodo de burbuja N es el tamao del vector For i = 0 To (n - k) If vector(i) > vector(i + 1) Then aux = vector(i) vector(i) = vector(i + 1) vector(i + 1) = aux End If Next Next
MATRICES En esta parte ser breve ya que todo lo explicado con los vectores es aplicable a las matrices, solo depende de su lgica e imaginacin. Para el siguiente ejemplo usaremos una matriz de 3 filas y 5 columnas que se llenar con nmeros al azar entre 1 y 100, luego se imprimir en pantalla. Las matrices las declaramos y las recorremos de la siguiente manera:
Module Module1
Sub Main() Dim matriz(3, 5) As Integer Dim i As Integer Dim random As New Random For i = 0 To 3 Console.WriteLine() For k = 0 To 5 matriz(i, k) = random.Next(1, 100) Console.Write("{0} ", matriz(i, k)) Next Next Console.ReadLine() End Sub
End Module
Precio de la madera se captura
Option Strict. Nunca es tarde para entender cmo funciona y la importancia que tiene sobre nuestros programas y nuestro estilo de programacin. Bien, pasemos a la teora. Option Strict puede ser nuestra segunda lnea de cdigo en los programas que desarrollemos en VB.Net En pocas palabras, lo que hace es: Option Strict on Exige que la conversin de tipos de datos (y la declaracin de variables) sea explcita Qu significa lo anterior? Eres de las personas que declara una variable y que no le asigna un tipo de dato? Si la opcin Option Strict se encuentra en el valor Off no tendrs ningn problema, automticamente la variable tomar un tipo Object y en tu cdigo podrs hacer uso de ella. Pero si tienes activada la opcin Option Strict (en el valor On) te topars con un error (ni siquiera advertencia) similar al siguiente: Dim Numero Option Strict On requiere que todas las declaraciones de variables tengan una clusula As. Desde aqu ya vemos que nuestro estilo de programacin se va a corregir por que ser necesario asignarle un tipo de dato a cada una de nuestras variables. Lo correcto en nuestro caso pudiera ser declarar nuestra variable de la siguiente forma:
Dim Numero as integer O la otra opcin (que no recomiendo) es asignarle directamente un tipo que almacenar. Por ejemplo, si nuestra variable Nmero almacenar Nmeros, pudiramos hacer la declaracin de la siguiente forma:
Dim Numero = 0 De esta forma el compilador asumir que guardars un valor numrico y le asignar un tipo de dato Integer. Porqu no recomiendo que el compilador asigne automticamente el tipo de dato?. A veces la eleccin que hace de forma automtica puede no ser la recomendable. Pongamos un ejemplo. Queremos una variable para guardar la edad de nuestro perro. Si declaramos de la siguiente forma, el tipo de datos que define el compilador ser Integer:
Dim EdadDeMascota = 2 Revisando la tabla de Tipos de datos de Visual Basic observamos que una variable de tipo Integer ocupar 4 bytes de memoria, y en ella pudieramos almacenar un nmero que est entre -2,147,483,648 y 2,147,483,647. Se me hace exagerado para guardar la edad de nuestra mascota. En este caso yo recomendara definirle un tipo a nuestra variable de la siguiente forma:
Dim EdadDeMascota as Byte Una variable de tipo Byte nos ocupar solamente 1 byte y nos permitir guardar un nmero que est entre 0 y 255. Creo que es ms que suficiente para almacenar la edad de nuestra mascota :) Es todo lo que nos exige Option Strict? No, otro punto importante es que debemos realizar una conversin explcita de nuestros datos para poder trabajar con ellos (los que no son del mismo tipo). Pongamos un ejemplo: Vamos a declarar una variable para almacenar la edad de nuestra mascota. A continuacin vamos a asignarle el valor de 2 y vamos a mostrarlo en una caja de texto (textbox). Quedara algo as:
Dim EdadDeMascota As Byte EdadDeMascota = 2 TextBox1.Text = EdadDeMascota Sin Option Strict este cdigo funcionara, pero con Option Strict activado tendramos un error como el siguiente: Option Strict On no permite la conversin implcita de Byte en String. El mismo Intellisense nos sugiere una forma para solucionar el Error. Es realizar la conversin del tipo Byte al tipo String para poder asignarla a la caja de texto. Pudiramos seguir el consejo de Intellisense y nos quedara as el cdigo:
Dim EdadDeMascota As Byte EdadDeMascota = 2 TextBox1.Text = CStr(EdadDeMascota) Cmo puedo activar Option Strict en mi cdigo? Cmo lo comentbamos, puede ser de nuestras primeras lneas en cada uno de nuestros mdulos y clases. Quedara de esta forma:
Option Strict On Otra forma es activarlo desde las propiedades de nuestro proyecto: