10.1. Objetivos del tema.
Visto como se inicia en VB un programa,
veamos ahora como resolver un ejercicio, basándonos en el uso de
procedimientos.
10.2. Introducción.
A la hora de programar, podemos optar por
varias soluciones, programación clásica o con objetos.
Actualmente lo adecuado es utilizar
objetos, por lo tanto deberíamos elegir ese camino, pero es una decisión
personal e intransferible.
Si nos aclaramos mejor con procedimientos
y funciones, sin profundizar en clases, podemos plantearnos las clases como un
segundo nivel, al que intentar llegar después.
Pero el camino es el de empezar por los
procedimientos, ya que como se ha comentado, un método es un procedimiento o
una función.
10.3. Primer ejercicio.
Tomemos como punto de partida el del
ejemplo del tema anterior, creemos un proyecto del tipo consola y démosle un
nombre.
Archivo à Nuevo proyecto, de la
barra de herramientas.
El nombre del proyecto, podemos cambiarlo
por el nombre que deseemos, y su ubicación será la que él tiene por defecto,
podemos dejarla o bien crear la nuestra propia.
Aparecerá la ventana vacía a la que
añadimos el código.
Por lo que nuestro programa quedaría:
Module Module1
Sub Main()
Dim dato1 As Integer
Dim
dato2 As Integer
Dim resultado As Integer
dato1 = 20
dato2 = 10
resultado = dato1 + dato2
System.Console.WriteLine("dato1 + dato2 =
" & resultado)
System.Console.ReadKey()
End Sub
End Module
Esta es una solución, pero así no se
puede hacer un programa, un programa es una estructura muy compleja, o puede
llegar a serlo, y para eso hace falta una estructura que sea resistente y
eficiente.
Apliquemos lo que hemos visto de los
procedimientos.
10.4. Parámetros en los procedimientos.
El nombre que se le da a la línea de
entrada en un procedimiento es de parámetros, línea de entrada, etc…
Empecemos por pasar parámetros al
procedimiento, por lo que en la línea de parámetros tendrá que aparecer las dos
variables.
Las variables tendrán que ir declaradas
con el tipo que les corresponde.
Private Sub Procedimento(ByVal D1 As
Integer, ByVal D2 As Integer)
Dim resultado As Integer
resultado = D1 + D2
System.Console.WriteLine("Dato1 + Dato2 = {0}
" , resultado)
System.Console.ReadKey()
End Sub
Al procedimiento después hay que llamarlo
para que se ejecute desde el programa principal, y por lo tanto también tiene
que enviarse las variables que se supone tiene que recibir en la línea de
entrada al mismo.
Procedimiento(dato1,dato2)
En el programa principal, dichas
variables deberán estar declaradas para poderse utilizar.
Dim
dato1 As Integer
Dim
dato2 As Integer
Ahora veamos la solución completa con los
cambios.
Module Module1
Private Sub Procedimiento(ByVal D1 As Integer, ByVal
D2 As Integer)
Dim resultado As Integer
resultado = D1 + D2
System.Console.WriteLine("dato1 + dato2 = {0}
", resultado)
System.Console.ReadKey()
End Sub
Sub Main()
Dim
dato1 As Integer
Dim dato2 As Integer
dato1 = 20
dato2 = 10
Procedimiento(dato1, dato2)
End Sub
End Module
Comprobemos que las variables que se
pasan lo son en el mismo orden, del mismo tipo y con el mismo dato, d1 desde
dato1 y d2 desde dato2.
10.5. Estructuras en los procedimientos.
Todas las estructuras que hemos visto, o
sea las tres que hay, son de aplicación en el interior de un procedimiento,
pero nos falta ver cual es su sintaxis, así que empecemos por ahí.
1 Estructuras alternativas.
Una estructura alternativa es una
instrucción en la que se puede ejecutar una de entre varias posibilidades, la
más sencilla es del tipo If.
if
(Expresión) Then dat1 = dato
Donde expresión será cualquier expresión
cuyo resultado de evaluación final siempre es del tipo cierto o falso.
Pueden ir o no acompañadas de un else, en
función de que sea necesario para nuestro programa.
if (dato > 0) then
dat1 = dato
else
dat1 = 25
end
if
Hay otra instrucción alternativa que es
Select Case, que mucho más estructurada y más potente en cuanto a sencillez de
posibilidades de creación de estructuras.
Aquí tenemos un ejemplo con los posibles
valores que nos interese de X, pero hay un sin fin de posibilidades en cuanto a
posibles expresiones para evaluar.
Select
case X
case 1
Instrucción;
Instrucción;
case 2
Instrucción;
Instrucción;
Case else
Console.writeline("error" )
End Select
Otro ejemplo de un Select Case
Select
case Mes
case 1: nombremes = "Enero"
case 2: nombremes = "Febrero"
case 3: nombremes = "Marzo"
.. / ..
case 12: nombremes = "Diciembre"
Case Else
NombreMes = "Incorreccto"
End Select
En el ejemplo podemos observar varias
formas de escribir la instrucción.
En caso de que en la estructura deseemos
dar una salida para la situación en la que no se cumpla ninguna de las
situaciones previstas, podemos utilizar la opción de Case else
Case Else
NombreMes = "Incorreccto"
End Select
Dicho de otra forma es el equivalente del
else en la instrucción If, vista anteriormente.
En el ejemplo tenemos una variable con un
valor previsto de -1 y desconocemos cuales son las otras posibilidades, por lo
tanto utilizamos case else para el resto.
Select Case valor
case -1
Console.writeline("No existe")
Case else
Console.writeline("Encontrado en la posición {0} " , valor)
End
Select
Las estructuras alternativas pueden ir
anidadas una en el interior de otra hasta alcanzar el nivel necesario para
resolver la estructura que se nos presenta.
if (x > 0) then
y = 15
if (x > 10) then
x = 2
else
x = 25
end if
else
x = 25
end
if
2 Estructuras repetitivas.
Como mencionamos en su momento,
disponemos de dos tipos de bucles, el de tipo Repite y el de tipo Mientras,
vamos a ver dichas instrucciones.
El bucle repite es una estructura en la
que siempre se ejecutará un paso en el ciclo del bucle, dado que no existe
ningún impedimento que impida la entrada en el mismo.
El control de la estructura está al final del mismo.
Si observamos la imagen podemos observar
como el símbolo en forma de rombo, que es el que indica el control del bucle
está situado al final de la estructura, y al principio solo hay instrucciones.
La flecha indica al punto del programa en
el cual se inicia la estructura o en el que está la primera instrucción del
bucle.
Si observamos las flechas podemos
observar como la última instrucción del bucle es la encargada de analizar la
situación en ese momento, para volver a iniciar una vez más el ciclo o seguir
hacia la siguiente instrucción, ya fuera del bucle.
Su sintaxis es la siguiente.
do
instrucción
... / ...
instrucción
Loop
Until (expresión de condición)
Sin embargo si observamos la imagen del
bucle mientras, podemos observar como a diferencia del bucle repite, la
instrucción de control está situada al inicio del mismo.
Esto implica que si al llegar al inicio
del bucle, la condición que expresamos en ese momento no se cumple, el bucle no
se ejecutará, no entraremos en el mismo, o si lo queremos ver así, el bucle
está protegido en su ejecución.
Si observamos las flechas podemos
observar como al acabar la última instrucción del bucle se retorna al inicio
del mismo, donde está la instrucción de control, en ese momento se analiza la
situación y se vuelve a ejecutar una vez más el ciclo, o se abandona el mismo,
siguiendo a la siguiente instrucción.
Su sintaxis es la siguiente.
While
expresión de condición
instrucción
... / ...
instrucción
End
While
Hay una tercera opción de bucle que es el
For.
Este bucle se ejecuta para un valor
inicial, hasta un valor final, con un incremento determinado, no deja de ser
una variación de un bucle mientras.
For X = 0 to 20
instrucción
... / ...
instrucción
Next
Lo que con un bucle mientras, equivale a:
inicialización;
While
X <>20
instrucción
... / ...
instrucción
incremento
End
While
Existe la instrucción exit for, exit do,
dentro de los bucles, pero quizás sea poco didáctico y no sea muy adecuado su
utilización en una primera fase del lenguaje, al igual que el uso del for,
hasta que no se haya avanzado más en el dominio del mismo.
En los bucles, sean del tipo que sean, y
se utilicen para lo que sea, siempre hay que tener presente el valor de
partida, el valor final, y el momento en el que se realiza el incremento del
contador, si es que se usa, o de la instrucción que provoque la progresión en
el mismo.
Por ejemplo en la visualización de los
números del 0 al 9, utilizaremos una variable del tipo entero.
Le daremos un valor inicial de cero, en
el bucle la primera instrucción será visualizar, y la condición del bucle será
mientras que x sea menor que diez.
El resultado será correcto.
Module Module1
Sub Main
Dim x as Integer = 0
while x < 10
Console.Writeline(x)
x = x + 1
End While
End Sub
End Module
Pero si alteramos el orden de las instrucciones, el valor cero
inicial, ya no será válido, pues el primer valor que se visualizará será uno, y
perdemos la visualización del cero. Además la condición final tampoco será
válida, pues acabaremos en diez, no en nueve, que es de lo que se trata.
Pruébelo.
Por lo tanto hay que tener siempre
presente, el punto de partida, los valores intermedios, el valor de la
progresión, en que momento, y cual es el último valor que debe procesarse en
el bucle.
Teniendo eso presente no debe haber nunca
problemas en el manejo de los bucles.
3 Estructuras secuenciales.
Vistas las dos anteriores, una estructura
secuencial no es más que una ejecución lineal de un número indeterminado de
instrucciones, sin que medie una estructura alternativa o repetitiva, podría
ser como ejemplo el siguiente.
instrucción
instrucción
instrucción
Como ejemplo podríamos poner:
Console.writeln(x) // Visualizar datos por pantalla
x
= x + 1 // Incremento de un contador
s
= s + x // Acumulador
10.6. Conclusiones.
Hemos visto como se inicia un programa en
VB, las distintas estructuras que se utilizan en programación, como se
escriben y su uso dentro de los procedimientos, falta ver las
funciones.
Hemos de tener presente que en lo que
podemos denominar programa principal, que en muchas ocasiones es algo ficticio,
o no muy próximo a la realidad, no se escribe casi código, si no llamadas a
procedimientos, o declaración y ejecución de los objetos que se han declarado,
y donde realmente se escriben los programas es en los procedimientos, y
funciones que se convierten en métodos en las clases.
No hay comentarios:
Publicar un comentario