Estructuras lógicas.

Anuncio
Cursosindustriales.net
Página 1
CURSO DE VB.NET.
CONDICIONALES Y BUCLES.
En esta parte del curso de Visual Basic.NET vamos a empezar a trabajar con
condicionales y a aprovecharnos de los recursos que nos facilitan los bucles.
En todo lenguaje de programación, se utiliza el uso de condicionales y de
bucles para que la aplicación tenga un mayor rendimiento reduciendo las
instrucciones de trabajo y realizando acciones de acuerdo a las opciones
indicadas en cada caso.
Este tema profundizará en el tema de los condicionales, que hemos visto en
capítulos anteriores, y abordaremos los bucles que usaremos en nuestro
próximo tema que será la primera práctica del curso: continuaremos con el
proyecto Videoclub.
Cursosindustriales.net
Página 2
¿QUÉ ES UNA CONDICIÓN?
No podemos empezar el tema, aunque ya hayamos vistos los condicionales
rápidamente, debemos de establecer como primer paso, qué es un condicional
o una condición.
En programación llamamos condición a la acción que se ejecuta si hemos
podido elegir entre varias opciones. Por ejemplo:
Si en el mercadillo, en una frutería, tienes en una cesta manzanas Golden, y en
otra cesta tienes manzanas Reineta. Si coges manzanas Golden el frutero te
cobrará un precio distinto al que te pondría si cogieses manzanas Reineta.
Esto puede parecer un poco complicado, pero cuando aprendas a usar
condicionales te va a resultar bastante sencillo realizar tus propias condiciones.
En Visual Basic.NET existen muchos tipos de condicionales más los que
puedes crear programando instrucciones, pero en este curso solo vamos a ver
los dos condicionales más usados por los programadores, el condicional IF
THEN y el SELECT CASE.
Cada uno de ellos es bueno en ciertas circunstancias del proyecto y malo para
otras.
Empezaremos con el estudio de IF - THEN, y terminaremos estudiando
los SELECT CASE para que así puedas ver que condicional usarás en tus
futuras aplicaciones.
Cursosindustriales.net
Página 3
If - Then.
Esta estructura condicional es un código que permite al usuario realizar varias
acciones según asigne unos valores dentro de la instrucción del comando. Es
decir, que el programa realizará una acción u otra dependiendo del valor que
se asigne al condicional.
La estructura del condicional compuesto es la siguiente:
Este condicional pertenece a los condicionales simples de Visual basic.NET y
conlleva un evento de validación de tipo Bolean, es decir, solo puede
ser TRUE o FALSE. Esto indica que cada condición que se haga será
exclusiva de la condición Si o No:
Como se puede apreciar, en este proyecto de Windows Form, cuando
ejecutes el formulario, se mostrará una ventana en la cual te pedirá que
insertes una edad. Dependiendo del número se mostrará un mensaje u otro.
Pero veamos en detalle este ejemplo:
Cursosindustriales.net
Página 4
Todo el programa se ejecuta dentro del proceso principal del formulario, lo que
cuando el formulario se cargue interpretará el contenido de su subproceso.
En la primera línea Dim numero As Integer = InputBox("¿Cuántos años
tienes?", "Edad", numero), estamos habilitando un control que mostrará una
ventana en la cual le pide al usuario la inserción de texto y que pertenece al
espacio de nombres Microsoft.VisualBasic, y asignándola a una variable del
tipo Integer para después usar el valor obtenido.
En la segunda línea tenemos la estructura básica del condicional. If numero
<=18 then, establece que si el valor de la variable número que asigne el
usuario es menor o igual a 18, saltará a la siguiente línea y se ejecutará la
instrucción siguiente, MsgBox ("Tienes menos de 18 años", VbInformation,
"Aún eres un niño).
Si por el contrario, el usuario selecciona un número superior a 18,
el CLR comprueba que la sentencia If inicial devuelve un FALSE (ya que el
número elegido por el contrario es diferente al esperado por TRUE, por lo que,
en la cuarta línea, Else, hace que se cargue la reacción del condicional.
Este condicional, podrás apreciar que es demasiado soso. Solo permite dos
únicas respuestas, por lo que si necesitamos agregar mas respuestas y mas
soluciones, no es capaz de solvertarnos este problema.
Los desarrolladores de .NET comprendieron el problema al usar este
condicional y pusieron pronto la solución al mismo, si bien, no es una
alternativa a otros tipos de condicionales para ciertas funciones, solventa
mucho el problema anterior. Introdujeron las anidaciones del condicional:
Mediante el uso de la instrucción ELSEIF, se podía seguir la lógica del
condicional sin que se pasara a ELSE, lo que permite cargar mas situaciones.
En la cuarta línea se ha introducido una instrucción ELSEIF con una nueva
acción.
Cursosindustriales.net
Página 5
Ahora ya he ampliado el rango de acción del usuario; si introduce otro valor
distinto al de la primera condición, saltará a la siguiente línea y ejecutará
el ELSEIF siempre que el valor introducido devuelva en el control del
condicional un TRUE. En caso de que devuelva un FALSE, ejecutará la
instrucción desde el ELSE.
Pero creo que aún podemos hacerlo algo mejor esta estructura si terminamos
correctamente el ejercicio, ya que la instrucción ELSE devolverá un TRUE para
valores del usuario superiores a 65, lo que nos dice que podría marcar hasta el
máximo del valor del Integer en cifras, cosa que no quedaría bien decir que
"Eres un viejete" con mas de casi cinco mil millones de años.
En este ejemplo, si introduces un número superior a 121, se te mostrará el
mensaje "¿Te crees inmortal?".
Como puedes ver hemos utilizado dos ELSEIF para establecer dos estados y
hemos anidado un condicional IF THEN para establecer el último paso.
Aunque perfectamente se podría poner otra condición ELSEIF, he decidido
anidar un condicional para que veas el uso de este control y como proceder a
anidarlo.
A veces ocurre que deseas interrumpir el condicional para que no se ejecute la
línea siguiente. Para ello recurrimos a la instrucción RETURN.
Esta instrucción hace que el CLR de Visual Basic.NET retorne a un estado
anterior y se salga del bucle o del condicional.
Para ver su funcionamiento, usaremos dicha instrucción en un bucle:
Cursosindustriales.net
Página 6
En este bucle sencillo, cuando ejecutemos la aplicación mostrará una serie de
ventanas con un número diferente del 1 al 10, es decir, nos mostrarán diez
ventanas de aviso, una detrás de otra según pulsemos el botón de Aceptar.
Imagina que quieres hacer que cuando llegue el programa al número 5, termine
la cuenta.
Para esto, debemos de utilizar un condicional junto a la instrucción RETURN de
la manera que se muestra a continuación:
Como puedes ver, el condicional está dentro del bucle, ya que lo que queremos
es que se detenga el bucle cuando llegue al número 5.
Si lo ejecutas verás que cuando llega al cinco, se termina el bucle y te muestra
el formulario.
En siguientes puntos veremos los bucles en detalle.
Cursosindustriales.net
Página 7
Select Case
Este condicional es uno de mis favoritos, porque te ofrece muchas más
posibilidades que el anterior IF THEN.
La sintaxis de éste condicional es la siguiente:
Como puedes ver, este condicional te permite establecer tantas condiciones
como quieras, y solo debes de escribir la acción dentro de cada
instrucción CASE.
Eso sí, ahora debes de matizar más en el valor de la instrucción y llamar
correctamente a la instrucción al declarar el SELECT CASE, ya que los
demás CASE deberán de estar relacionados entre sí, ya que debes de
programar el cada CASE en relación al tipo de variable inicial en el SELECT
CASE.
Veamos un ejemplo:
Cursosindustriales.net
Página 8
Según Introduzcas un valor u otro se ejecutará el CASE específico.
Como ves, yo solo he introducido tres casos específicos para el valor de 1, 2 o
3. Pero podrás incluir todos los CASE que tú quisieras en tu programa.
Además, cuando se ejecuta la instrucción del CASE, se termina el bucle y no
ejecuta el siguiente.
Pero, ¿qué pasaría si escogemos un número mayor de 3?
Para eso existe otra instrucción que utilizamos como general cuando no se da
la condición establecida en cualquiera de los CASE. Es el CASE ELSE:
Ahora si ejecutamos el programa y ponemos un número diferente al que nos
pide, se ejecutará la instrucción CASE ELSE ya que ninguna de las anteriores
entradas son correctas.
Ahora, ¿me sabrías decir que va a pasar si en vez de un número, escribo un
carácter en la ventana?
La respuesta es sencilla, como no se ejecuta ninguna opción establecida por el
condicional (ni siquiera el CASE ELSE), se muestra directamente el formulario
ya que has declarado la variable Integer y estás usando un valor String.
En este caso CLR debería de mostrar un error, pero como el fallo no afecta al
condicional SELECT CASE, no ejecuta el error, y por tanto omite el condicional.
Cursosindustriales.net
Página 9
Has visto como mediante este condicional se pueden obtener múltiples
acciones según las múltiples respuestas.
El uso de los condicionales es de libre elección a gusto del desarrollador, pero
depende de ti con cual que vas a familiarizarte, aunque por norma general
ambos condicionales serán usados en muchas aplicaciones, e incluso anidarás
un tipo de condicional con otro.
También es posible que este condicional trate rangos numéricos:
Este ejercicio es similar al anterior, pero con la diferencia de que lo hemos
realizado con el condicional SELECT.
La primera línea es igual que el ejercicio anterior con IF THEN.
En la segunda línea declaramos el SELECT CASE y la variable que queremos
utilizar en nuestras condiciones CASE.
Puedes ver ahora que hemos establecido unos rangos de acción para que si el
usuario escribe un número comprendido entre esos rangos, se muestre un
mensaje diferente.
En el último condicional común CASE ELSE, puedes ver como he establecido
que si me tomas el pelo te muestre un mensaje de aviso diferente. Observa
como he introducido el valor de la variable numero en el interior del cuadro de
aviso mediante el condicional & y después he seguido ajustando la instrucción
MSGBOX.
El condicional ampersand &, te ayudará enormemente en este tipo de
situaciones para concatenar cadenas y variables en varios controles.
Cursosindustriales.net
Página 10
BUCLES
Los bucles son acciones repetitivas que se programan para que el
programador no tenga que escribir un número X de veces cierto patrón
repetitivo. Además los bucles permiten interactuar con la aplicación y asignar
valores diferentes sin que lo tenga que programar el programador.
Existen varios tipos de bucles, como los que repiten una instrucción hasta que
se dé una condición preestablecida (bucles condicionales) y los bucles que
repiten una instrucción un número de veces definidas.
Para empezar, comenzaremos con el estudio de los bucles de repetición
definida, siendo el bucle más común el formado por la
estructura FOR y NEXT en la cual mediante el atributo FOR se agrega la
instrucción necesaria para que se realice el bucle.
El atributo NEXT indica al compilador CLR que se termina el bucle FOR y que
debe de cerrarlo. Sin esta instrucción, el bucle seguiría abierto y
reproduciéndose, produciendo un error de lectura del código y de los datos.
La estructura básica de un bucle es:
En donde la secuencia del bucle será el elemento que se repetirá y la
instrucción a ejecutar será una instrucción adicional que condicione el bucle.
Uso de un bucle For.
Imagina que queremos que se muestre en pantalla una serie de números del 1
al 10 en orden y progresivamente.
En un nuevo proyecto de Aplicación de consola haríamos lo siguiente:
Cursosindustriales.net
Página 11
Con la instrucción Console.WriteLine hacemos que se muestre en pantalla la
acción del bucle.
Como puedes ver el bucle está formado por la secuencia del bucle a = 1 to 10,
y la instrucción a ejecutar (Console.WriteLine(a)). El bucle se cierra mediante
su cierre NEXT.
Con la instrucción Console.ReadLine, hacemos que no se cierre la pantalla
automáticamente y por lo tanto, el programa requiere de una acción del usuario
para cerrar la ventana (o pulsar Intro, o cerrar la ventana directamente).
Puedes ver que la instrucción Console.ReadLine, se encuentra fuera del bucle,
por lo que esperará el programa a que se pulse Intro, después de haber
ejecutado el bucle entero, ¿qué pasaría si agregáramos esta instrucción dentro
del bucle?
Antes de responder, vamos a explicar el bucle en profundidad:
Dentro del proceso principal Sub Main, en la primera línea hemos declarado
una variable del tipo Integer y no la hemos dado ningún valor.
Por defecto CLR reserva el máximo espacio de memoria para este tipo de
valor.
En la tercera línea abrimos el bucle y en él asignamos la variable (a) un rango
que va desde 1 a 10; literalmente significa Para a =1 hasta 10.
Dentro del bucle establecemos que queremos que se muestre en pantalla
mediante el uso del comando Console.WriteLine, la variable a para cada uno
de los valores del bucle anterior. Por lo que se muestra la serie de números
establecidos en el bucle FOR.
Si hubiésemos puesto la instrucción Console.ReadLine dentro del bucle, el
programa nos obligaría a pulsar Intro cada vez que quisiesemos ver un número
y sería así hasta que se completase el bucle (llegase al número 10).
El bucle FOR también nos permite interactuar con la aplicación. Por ejemplo, si
en el ejemplo anterior, preguntamos que nos ponga un número del 1 al 10,
podemos programar el bucle para que nos muestre los números hasta el
número que hemos elegido:
Cursosindustriales.net
Página 12
En el siguiente ejercicio, puedes observar cuando lo ejecutes que la ventana te
pide que escojas un número del 1 al 10. Cuando pulses el Intro, se te mostrará
un bucle con el número de veces escogido.
En la tercera línea, Console.Write, indica al CLR que se desea que el usuario
introduzca un valor.
A continuación, en la línea siguiente, realizamos una función de conversión con
la función CINT, para que en la consola solo trate números enteros. Si intentas
poner un número en FLOAT o decimal, esta función no tendrá en cuenta el
decimal y lo elimina. Por ende, si por ejemplo, ponemos el número 4.5 (el punto
es la coma del decimal), la función interpretará 4.5 como 45 y realizará el bucle
en consecuencia.
En la línea siguiente, el bucle propiamente establecido. Hemos indicado que el
rango de acción del mismo va desde el 1 hasta el valor de la variable (a) que
previamente, el usuario ha definido. Mostramos el resultado del bucle en la
línea siguiente: Console.WriteLine ("Este es el número: " & b), la cual muestra
todos los números desde el 1 hasta el elegido.
En este ejemplo has podido ver como interactuamos más con el usuario, y
ahora podemos definir el número de veces que queremos que se muestre el
mensaje.
NOTA: Es aconsejable nos familiaricemos con las funciones de conversión y
siempre incluirlas en este tipo de ejercicios, para así evitar un fallo de errores
por el usuario.
Ordenación.
Podemos establecer un orden a la hora de programar un bucle, es decir,
podemos hacer que los datos a mostrar, se representen de manera ordenada,
tal cual lo hacen por defecto al principio, o que se muestren de final a inicio,
utilizando funciones adicionales y que se pueden agregar al bucle. Una de las
funciones que más se usan es STEP.
Esta función, establece que el bucle realizará los saltos establecidos en la
función. STEP significa literalmente en castellano "paso", por lo que el bucle
Cursosindustriales.net
Página 13
establecerá un orden de paso a paso de acuerdo al STEP que se le informe.
Por ejemplo, en el anterior ejercicio, si establecemos un STEP 2, mostrará el
bucle de dos en dos:
También podemos hacerlo que se muestre en orden decreciente:
Observa que para el orden creciente, no hace falta poner la función STEP para
cada paso numeral. Pero cuando es inverso el sentido si es obligatorio, pues
de no ponerlo, CLR no es capaz de ejecutar el bucle correctamente.
Cursosindustriales.net
Página 14
Bucle DO LOOP.
Este tipo de bucle repetirá una acción mientras no se introduzca una acción
adecuada y predefinida con anterioridad.
Imagina que en ejemplo anterior queremos que el usuario adivine un número
que hemos definido previamente y que hasta que no lo escriba salga un
mensaje de error.
Con este bucle se puede realizar este ejercicio:
Como puedes ver he realizado el programa de manera que hasta que no
aciertes el número 9, se repita el mensaje.
La estructura del bucle DO, siempre va acompañado del
condicional WHILE que significa "mientras" y termina el bucle con la
instrucción LOOP, que ejecutará la contraprogramación.
Explicando el funcionamiento, en la primera línea declaro una variable Integer y
no la asigno ningún valor.
En el bucle condicional, asigno la variable a un número (9 en este caso) y le
indico al programa que mientras el número sea distinto de 9, se muestre el
mensaje que contiene el bucle, Console.Write(Adivina mi número (1-10): ").
En la línea inmediata, tengo que asigna el valor de la variable a la función
Console.ReadLine para que se repita el proceso de no devolver un TRUE el
bucle.
En el momento en que aciertes el número 9, el bucle saltará al LOOP y
ejecutará la línea siguiente, en la cual te felicitará por haber adivinado el
número.
Otra forma de utilizar este bucle es con el condicional UNTIL y podemos
obtener el mismo efecto:
Cursosindustriales.net
Página 15
Como puedes observar en relación al anterior, ejercicio, la única diferencia es
el uso de los atributos de DO, y que en este caso hemos indicado que hasta el
valor de la variable (a) no sea de 9, no se salga del bucle.
Bucle WHILE.
El otro de los bucles más usados en Visual Basic.NET es el bucle WHILE el
cual es muy similar al anterior, pero con la diferencia de que es más simple que
el anterior.
Viendo el mismo ejemplo, se realizaría con un bucle WHILE de la siguiente
manera:
La diferencia entre un bucle u otro es el juego que se puede dar usando uno u
otro. Hay que decir que el sentido de la programación, es mejor el bucle DO
(WHILE / UNTIL) - LOOP, que el bucle WHILE, pero depende del programador
y el uso que le va a dar para sus aplicaciones.
Cursosindustriales.net
Página 16
CONCATENANDO CONDICIONALES Y BUCLES
Al igual que podemos concatenar condicionales y bucles, podemos mezclar
ambas en un mismo programa. De hecho, pronto aprenderás que una
aplicación sin condicionales ni bucles no es una aplicación que se precie.
Para mezclar unos con otros debes de saber qué es lo que quieres conseguir,
el tipo de programa que buscas, y la función principal que vas a realizar.
Siguiendo con el programa anterior de que adivinemos el número, vamos a
mezclar los términos aprendidos hasta el momento en una aplicación de
Windows:
Programa Adivina:
El siguiente programa de Windows, te pide que introduzcas un número en
el TextBox para ver si el número que ha pensado el programa
automáticamente.
El programa consta de únicamente dos controles, un Button y un TextBox.
El código que hace posible el programa se muestra a continuación:
Cursosindustriales.net
Página 17
Explico el programa:
Cuando se inicia, te pide que introduzcas un nombre. El programa te tratará de
tú y te pedirá que escribas un número de entre el 1 y el 10 a ver si adivinas el
número que ha pensado la máquina. Dependiendo de tus respuestas, te
mostrará un mensaje u otro.
Como puedes ver en la clase principal, declaro las variables que utilizaré para
que estén disponibles para cualquier control, es decir, las declaro de ámbito
público. Son dos variables, una Integer para los números y el String para tú
nombre.
Dentro del proceso del formulario, incluyo la lógica para cuando se ejecute la
aplicación se muestre la ventana para que insertes tu nombre.
Como puedes ver he utilizado el bucle DO UNTIL para decir al programa que
hasta que el usuario no inserte un nombre, no pueda continuar el proceso, ya
que dentro del bucle he introducido una instrucción GOTO que retorna al punto
definido previamente GOTO A, por lo tanto hasta que el valor de la variable no
esté definido, no se ejecutará el LOOP.
En la siguiente línea, la instrucción Randomize(), es necesaria para
redimensionar y tratar un valor entero.
La línea siguiente, a=CInt(int((10 * rnd()) +1)), establece el número aleatorio
que deberás introducir en el TextBox1 para que ganes.
Observarás en la última línea del código del formulario, que he agregado un
Label que muestre el valor del número aleatorio. Tú, puedes eliminar
esta Label y así hacerle al usuario más difícil la adivinación.
En el código del Button1, he establecido un bucle DO WHILE que indica que
mientras el valor del número aleatorio no sea el correcto, el usuario siga
intentándolo hasta que dé con él.
La instrucción de la siguiente línea Return, hace que no se muestre
constantemente el cuadro de aviso de fallo indicado en el bucle, es decir, que
corta el bucle para que no se haga infinito.
Has podido ver cómo hemos utilizado lo aprendido hasta ahora para hacer un
sencillo programa que calcula un número aleatorio y nos pide que lo
adivinemos. Está claro que solo es una aplicación básica, pero tú ya tienes los
conocimientos necesarios para matizar más opciones y mejorarlo.
Cursosindustriales.net
Página 18
Hasta aquí ha llegado este tema.
Puedes guardar el proyecto realizado, o eliminarlo, pero te recomiendo que lo
guardes para que puedas disfrutar de él y realizar el estudio del mismo con
más detalle.
Cursosindustriales.net
Página 19
Descargar