Está en la página 1de 12

4.

ESTRUCTURAS DE CONTROL
INTRODUCCIÓN
Habitualmente, en la secuencia de ejecución de un programa, surge la necesidad de
repetir la ejecución de determinadas instrucciones o condicionar la ejecución de algunas
de ellas. Para dirigir la secuencia de ejecución para que el programa consiga sus
objetivos se utilizan las sentencias de control.
Las sentencias de control se pueden agrupar en las siguientes categorías.
• Sentencias condicionales. Las instrucciones IF y Select Case se conocen
como instrucciones condicionales. Estas instrucciones ejecutan unas u otras
instrucciones en función del valor de expresiones.
• Sentencias iterativas. Las instrucciones While... End While y Do…Loop
incluyen bloques de instrucciones que se ejecutan de forma reiterada
mientras se cumple una condición. También se conocen como bucles.
• Sentencias de salto. Las instrucciones goto y continue se usan para
transferir el control incondicionalmente a otra instrucción. No se
recomienda su uso indiscriminado ya que rompe las reglas de la
programación estructurada.
• Sentencias de control de excepciones. Las instrucciones Try…Catch
permiten capturar los errores de ejecución con excepciones que permiten
controlar el programa cuando el error se produce.

If…Then…Else
La construcción If…Then…Else, nos permite ejecutar una o más condiciones que
podemos comparar utilizando operadores relacionales y operadores lógicos.

Sintasix
If expresión-booleana Then
bloque1
Else
bloque2
End If
La instrucción If evalúa una expresión booleana. Si el resultado de la expresión
booleana es True, el control pasa al primer bloque; si es False y existe una cláusula
Else, el control se transfiere al segundo bloque.

Ejemplo
Se puede utilizar una instrucción If sencilla, como la siguiente:
If numero Mod 2 = 0 Then
Console.WriteLine("par")
End If

Visual Basic .Net | ESTRUCTURAS DE CONTROL 1


O una sentencia If con Else
Dim intValor As Integer = 5
If intValor > 5 Then
System.Console.WriteLine("Valor mayor que 5")
Else
System.Console.WriteLine ("Valor menor que 6")
End If

If en cascada
La instancia ElseIf permite tener un número arbitrario de ramas. No obstante, las
instrucciones controladas por una instrucción ElseIf son mutuamente excluyentes, lo
que significa que sólo se ejecuta una instrucción de entre todas las instancias ElseIf.
Sintasix
If expresión-booleana1 Then
bloque1
ElseIf expresión-booleana2 Then
bloque2
Else
bloque3
End If
Ejemplo
Dim intValor As Integer = 5
If intValor > 5 Then
Console.WriteLine ("Valor mayor que 5")
ElseIf intValor < 5 Then
Console.WriteLine ("Valor menor que 5")
Else
Console.WriteLine ("Valor igual a 5")
End If

Select Case...End Select


Se trata de una evolución en la estructura If...End If de decisión múltiple, y su trabajo
consiste en evaluar una expresión y comparar el resultado con la lista de expresiones de
cada uno de los casos proporcionados.

Visual Basic .Net | ESTRUCTURAS DE CONTROL 2


Sintaxis
Select Case Expresión
Case ListaExpresionesA
código si se cumple ListaExpresionesA
[Case ListaExpresionesB]
código si se cumple ListaExpresionesB
[Case Else]
código si no se cumple ninguna ListaExpresiones
End Select
La lista de expresiones asociada a cada Case en esta estructura estará separada por
comas y podrá tener alguno de los siguientes formatos:
• Expresión.
• ExpresiónMenor To ExpresiónMayor
• Is OperadorComparación Expresión
Tras evaluar la expresión de la estructura, si se encuentra una coincidencia con alguno de los
Case, se ejecuta el bloque de código situado entre dicho Case y el siguiente. En caso de que no
haya ninguna coincidencia, podemos opcionalmente, ejecutar un bloque por defecto, utilizando
la palabra clave Case Else. Finalizada esta estructura, la ejecución continuará a partir de la línea
situada después de End Select.

Ejemplo
El siguiente código da información sobre el número introducido o el rango al que
eprtenece.
Sub Main()
Dim valor As Integer
Console.WriteLine("Introducir un número")
valor = Console.ReadLine()
Select Case valor
Case 5
Console.WriteLine("El valor es 5")
Case 120, 250
Console.WriteLine("El valor es 120 ó 250")
Case 3000 To 4000
Console.WriteLine("El valor está en el rango de 3000 a 4000")
Case Is < 10
Console.WriteLine("El valor es menor de 10")
Case Else
Console.WriteLine("El valor es {0}, y no se cumple ningún caso", Valor)
End Select
Console.ReadLine()
End Sub
En el caso de que tras evaluar la expresión, haya más de un Case cuya lista de
expresiones se cumpla, se ejecutará el que esté situado en primer lugar. En el ejemplo
anterior, cuando la variable Valor contiene 5, se cumplen dos casos.

Visual Basic .Net | ESTRUCTURAS DE CONTROL 3


While... End While
La instrucción While…End While es la más sencilla de todas las sentencias iterativas.
Ejecuta repetidamente el bloque de instrucciones que contiene mientras se cumpla una
expresión booleana.

Sintaxis
While Expresión
bloque de instrucciones
End While

Ejemplo
El siguiente ejemplo muestra en consola todos los números desde 1 hasta el valor
introducido
Sub Main()
Dim valor As Integer
Dim contador As Integer=1
Console.WriteLine("Introducir un número")
valor = Console.ReadLine()
Console.WriteLine("Mostrar en consola todos los números desde 1 hasta ”&valor)
While contador <= valor
Console.Write("-" & Contador)
contador += 1
End While
Console.ReadLine()
End Sub

Do...Loop
Esta estructura ejecuta un conjunto de líneas de código en función del valor de una
expresión condicional. La condición puede estar situada al comienzo o final de la
estructura.

Sintaxis
Condición al principio.
Do While | Until Expresión
bloque de instrucciones
Loop
La diferencia entre usar While o Until reside en que empleando While, el código del
bucle se ejecutará mientras la expresión devuelva Verdadero. En el caso de Until, el
código se ejecutará mientras que la expresión devuelva Falso.

Ejemplo
El siguiente ejemplo permite la introducción de un número distinto de 200 y la palabra
coche.

Visual Basic .Net | ESTRUCTURAS DE CONTROL 4


Sub Main()
Dim valor As Integer
Dim palabra As String=” ”
' bucle con While
Do While valor <> 200
Console.WriteLine("Introducir un número")
valor = Console.ReadLine()
Loop
' bucle con Until
Do Until palabra = "coche"
Console.WriteLine("Introducir una palabra")
palabra = Console.ReadLine()
Loop
End Sub

Sintaxis
Condición al final.
La diferencia en este caso, consiste en que el contenido de la estructura se ejecuta al
menos una vez.
Do
bloque de instrucciones
Loop While | Until Expresión

Ejemplo
Realiza la misma operación que el ejemplo anterior
Sub Main()
Dim valor As Integer
Dim palabra As String

' bucle con While


Do
Console.WriteLine("Introducir un número")
valor = Console.ReadLine()
Loop While valor <> 200
' bucle con Until
Do
Console.WriteLine("Introducir una palabra")
palabra = Console.ReadLine()
Loop Until palabra = "coche"

End Sub

Visual Basic .Net | ESTRUCTURAS DE CONTROL 5


For...Next
Esta estructura ejecuta un bloque de código un número determinado de veces,
establecido por un rango de valores y controlado por un contador.

Sintaxis
For Contador = Inicio To Fin [Step Incremento]
bloque de instrucciones
Next
El elemento Contador se inicializa con un valor y el código existente entre For y Next
es ejecutado una serie de veces, hasta que el valor de Contador se iguala a Fin.
Por defecto, los incrementos de Contador son en uno, pero podemos cambiar este
aspecto utilizando el modificador Step, mediante el que podemos establecer el número
en el que se van a realizar los incrementos. Step también nos permite realizar
decremento utilizando un número negativo.

Ejemplo
El siguiente ejemplo permite observar variaciones del bucle for
Sub Main()
Dim contador As Integer
Dim final As Integer

' recorrido simple del bucle


Console.WriteLine("Bucle For normal")
For contador = 1 To 10
Console.WriteLine("Variable contador: {0}", contador)
Next
Console.WriteLine()

' recorrer el bucle especificando un incremento


Console.WriteLine("Bucle For con incremento")
Console.WriteLine("Introducir el número de ejecuciones para el bucle")
final = Console.ReadLine()
For contador = 1 To final Step 4
Console.WriteLine("Variable contador: {0}", contador)
Next
Console.WriteLine()

' recorrer el bucle especificando un decremento


Console.WriteLine("Bucle For con decremento")
For contador = 18 To 4 Step -1
Console.WriteLine("Variable contador: {0}", contador)
Next
Console.WriteLine()

Visual Basic .Net | ESTRUCTURAS DE CONTROL 6


' este bucle no se ejecutará, al ser mayor el valor de contador
' que el valor final, y no haber establecido un decremento
For Contador = 18 To 4
Console.WriteLine("Variable Contador: {0}", Contador)
Next
End Sub
Se puede optimizar la ejecución en un bucle de este tipo, utilizando como contador una
variable de tipo Integer, en vez de una de tipo Short, Long, Decimal, etc. Esto es debido
a que los tipos Integer se actualizan más rápidamente que los otros tipos numéricos.

For Each...Next
La instrucción For Each repite un grupo de sentencias para cada elemento de un array o
de una colección. Esta sentencia será estudiada con detalle en el capítulo dedicado a
Arrays.

Sintasix
For Each Elemento In ColecArray
bloque de instrucciones
Next

Ejemplo
Sub Main()
' crear un array y rellenarlo con valores
Dim isColores() As String = {"Azul", "Verde", "Marino", "Violeta"}
Dim isColor As String
' en cada iteración se obtiene un elemento
' del array lsColores, y se guarda en la variable lsColor
For Each isColor In isColores
Console.WriteLine(isColor)
Next
End Sub

Continue
La sentencia Continue oblige a ejecutar la siguiente iteración del bucle While, Do o For
en el que está contenida.
No se recomienda utilizar esta instrucción pues rompe las reglas de la programación
estructurada.

Sintasix
Continue {While | Do | For}

Visual Basic .Net | ESTRUCTURAS DE CONTROL 7


GoTo
La sentencia GoTo transfiere el control a una línea específica del programa, identificada
por una etiqueta.

Sintasix
GoTo etiqueta
.
.
etiqueta:
bloque de instrucciones

Try…Catch
Dentro del esquema de gestión de errores del entorno .NET Framework, encontramos
las figuras del error y la excepción. Estos elementos son utilizados indistintamente en
muchas ocasiones para hacer referencia genérica a los errores producidos; sin embargo,
aunque complementarios, cada uno tiene su propia funcionalidad dentro del proceso de
tratamiento de un error.
• Error. Un error es un evento que se produce durante el funcionamiento de
un programa, provocando una interrupción en su flujo de ejecución. Al
producirse esta situación, el error genera un objeto excepción.
• Excepción. Una excepción es un objeto generado por un error, que contiene
información sobre las características del error que se ha producido.
Visual Basic .NET es un lenguaje orientado a objetos y por lo tanto, la gestión de
errores se realiza mediante excepciones. Cuando se produce un error se lanza una
excepción. Si utilizamos las instrucciones de código necesarias para gestionar las
excepciones, tendremos un control claro en todo momento, sobre la ejecución de
nuestras aplicaciones.
Las instrucciones para usar excepciones tienen una estructura como la que se detalla a
continuación:
Try
bloque de instrucciones donde se detecta la excepción
Catch <tipo_excepción>
bloque de instrucciones en el caso de que suceda una excepción
[Finally
bloque de instrucciones que se ejecutan en cualquier caso]
End Try

Ejemplo
Public Sub Main()
Dim sValor As String
Dim iNumero As Integer
Try
' comienza el control de errores
Console.WriteLine("Introducir un número")
Visual Basic .Net | ESTRUCTURAS DE CONTROL 8
sValor = Console.ReadLine()
' si no hemos introducido un número...
iNumero = sValor ' ...aquí se producirá un error...
' ...y no llegaremos a esta parte del código
iNumero = iNumero + 1000
Catch
' si se produce un error, se genera una excepción
' que capturamos en este bloque de código
' manipulador de excepción, definido por Catch
Console.WriteLine("Error al introducir el número" & _
ControlChars.CrLf &"El valor {0} es incorrecto", sValor)
‘ControlChars.CrLf-> provoca un salto de línea
End Try
' resto del código del procedimiento
' ....
Console.ReadLine()
End Sub

DEPURACIÓN
Se puede utilizar el Visual Studio Debugger para fijar puntos de interrupción en el
código y examinar los valores de variables.
Puede insertar un punto de interrupción pulsando en el margen izquierdo. Vuelva a
pulsar para borrar el punto. Al ejecutar la aplicación en modo de depuración, la
ejecución se detendrá en esta línea y será posible examinar el contenido de variables.
La ventana Inspección resulta útil para supervisar los valores de variables seleccionadas
mientras se ejecuta la aplicación. Si escribe el nombre de una variable en la columna
Nombre, su valor aparecerá en la columna Valor, por lo que podrá ver todos los
cambios que se produzcan durante la ejecución. También es posible sobrescribir el valor
de una variable inspeccionada para modificarla.
Una vez fijados los puntos de interrupción necesarios, se puede ejecutar la aplicación
seleccionando Iniciar Depuración en el menú Depuración o pulsando F5. La
ejecución se detendrá al llegar al primer punto de interrupción.
La ejecución se reanudará al seleccionar Continuar en el menú Depuración, aunque
también se pueden emplear las opciones de avance paso a paso por instrucciones del
menú Depuración para avanzar en el código línea por línea. En el caso de que no se
quiera depurar el interior de un métodos se debe ejecutar sobre la llamada del mismo
sobre la opción avance paso a paso por procedimientos.

PRÁCTICAS
1) Escribir dos versiones (una usando for y otra usando while) de un programa que
imprima una escala de temperatura de -30ºC a +45ªC, en la que varíen de 5 en 5
ºC.
2) Escribir un programa que imprima las tablas de multiplicar del número 1 al 10.
Cada tabla debe ir separada por una línea en blanco.

Visual Basic .Net | ESTRUCTURAS DE CONTROL 9


3) Escribir un programa que genere, de modo aleatorio, 10 números entre 1 y 100.
Nota:
Randomize([Número]). Inicializa el generador de números aleatorios, que utilizaremos
posteriormente en la función Rnd( ). Opcionalmente recibe un número como parámetro
que sirve al generador como valor inicial o semilla para la creación de estos números.
Rnd([Número]). Devuelve un número aleatorio de tipo Single, que será menor que 1,
pero mayor o igual a cero.
Podemos, opcionalmente, variar el modo de generación del número pasando un valor al
parámetro de esta función. En función de si el parámetro es mayor, menor de cero, o
cero, el comportamiento de Rnd( ) a la hora de generar el número será diferente.
Dim Contador As Integer
Dim Aleatorio As Single
Randomize()
For Contador = 1 To 10
Aleatorio = Rnd()
Console.WriteLine("Número generado: {0}", Aleatorio)
Next
Console.ReadLine()
El anterior código produce la siguiente salida

Si necesitamos que el número aleatorio esté comprendido en un intervalo de números


enteros, utilizaremos esta fórmula
Int((LímiteSuperior - LímiteInferior + 1) * Rnd() + LímiteInferior)
El ejemplo siguiente se crean números aleatorios comprendidos entre el intervalo de los
números 7 y 12.
Dim Contador As Integer
Dim Aleatorio As Single
Randomize()
For Contador = 1 To 10

Visual Basic .Net | ESTRUCTURAS DE CONTROL 10


Aleatorio = Int((12 - 7 + 1) * Rnd() + 7)
Console.WriteLine("Número generado: {0}", Aleatorio)
Next
Console.ReadLine()
4) Escribir un programa genere números aleatorios (entre 1 y 100) y verifique si son
pares o impares, mostrando el resultado en la pantalla.
Nota:
Recordar que el operador Mod nos muestra el resto de dos números enteros
5) Escribir un programa que genere aleatoriamente un número como nota de un
alumno, y muestre su calificación según la siguiente tabla: (fijar un rango entre 0 y
150)
De 0 a 50 puntos -> Suspenso
De 51 a 75 puntos -> Recuperar
De 76 a 90 puntos -> Aprobado
De 91 a 100 puntos -> Aprobado con mérito
Menor que 0 o mayor que 100 -> puntuación inválida.
6) Conversión de un día del año en un par de mes y día. En este ejercicio se
implementará un programa que lea de la consola un número entero de día (entre 1 y
365) y lo almacene en una variable entera. El programa convertirá este número en un
mes y un día del mes e imprimirá el resultado en la consola. Por ejemplo, el resultado de
introducir 40 debe ser “Febrero 9”. (En este ejercicio se ignora el efecto de los años
bisiestos.)
Realizar una mejora al programa permitiendo realizar la operación múltiples veces hasta
que se introduce el 0.
Realizar una mejora creando una excepción propia que lance un error en el caso de que
el día no esté en el rango correcto (1:365).
7) Escribir un programa que detecte e imprima en la pantalla números múltiplos de
3. Esos números deben variar de 1 a 100. Controlar que el número esté en el rango
establecido. Los números se deben introducir por teclado.
Modificación: Después de escribir el programa crear una excepción y lanzarla si el
número no está en el rango establecido.
8) Crear un programa que reproduzca el juego de “Adivina mi número”.
1. El ordenador deberá generar un número aleatorio entre 0 y 100.
2. A continuación nos pide que adivinemos su número, para lo que
tendremos que teclear uno.
3. Aparecerá un mensaje en pantalla diciéndonos si nuestro número es
mayor o menor o felicitándonos si hemos acertado.
4. Si hemos fallado, nos volverá a pedir otro hasta que lo acertemos.
5. Cuando acertemos, también nos dirá cuántos intentos hemos realizado.
9) Escriba un programa que nos calcule el cambio que debe dar la caja de un
supermercado: Dado un precio y una cantidad de dinero, el programa nos dirá

Visual Basic .Net | ESTRUCTURAS DE CONTROL 11


cuántas monedas deben darse como cambio de tal forma que el número total de
monedas sea mínimo.
10) Modificar el ejemplo anterior y, utilizando control de excepciones correspondiente
controlar el error de introducir un String en la entrada.

Visual Basic .Net | ESTRUCTURAS DE CONTROL 12

También podría gustarte