El documento explica la instrucción switch en los microcontroladores. Switch permite seleccionar entre grupos de instrucciones dependiendo del valor de una expresión. Cada grupo está identificado por una etiqueta case y el control pasa al grupo coincidente. Si ninguno coincide, pasa al siguiente comando o a un grupo default. Se proveen ejemplos para ilustrar el uso de switch, break y conversiones de mayúsculas.
Topografía 1 Nivelación y Carretera en la Ingenierías
INSTRUCCIONES SWITCH Y BREAK EN C
1. CENTRO TECNOLÓGICO DE AVANZADA
AREA DE MECATRÓNICA
Código: M06 MICROCONTROLADORES I
Laboratorio: D-19
Duración: 2 Hs INSTRUCCIONES DE CONTROL
5.2. Instrucción switch
Objetivos
1. Entender el funcionamiento de la estructura switch.
La instrucción switch hace que se seleccione un grupo de instrucciones entre varios
grupos disponibles. La selección se basa en el valor de una expresión que se incluye en la
instrucción switch.
La forma general de la instrucción switch es
switch (expresión) instrucción
en donde expresión devuelve un valor entero. Tenga en cuenta que expresión tam-
bién puede ser de tipo char, ya que los caracteres individuales tienen valores enteros.
La instrucción incluida es generalmente una instrucción compuesta que especifi-
ca opciones posibles a seguir. Cada opción se expresa como un grupo de una o más
instrucciones individuales dentro de la instrucción global incluida.
Para cada opción, la primera instrucción dentro del grupo debe ser precedida por
una o más etiquetas «case» (también llamadas prefijos). Las etiquetas case identifican
los diferentes grupos de instrucciones (las distintas opciones) y distinguen unas de otras.
Las etiquetas case deben ser, por tanto, únicas dentro de una instrucción switch dada.
Cuando se ejecuta la instrucción switch, se evalúa la expresión y se transfiere el
control directamente al grupo de instrucciones cuya etiqueta case tenga el mismo valor
que el de expresión. Si ninguno de los valores de las etiquetas case coincide con el
valor de expresión, entonces no se seleccionará ninguno de los grupos de la instrucción
switch. En este caso se transfiere el control directamente a la instrucción que se encuentre
a continuación de la instrucción switch.
EJEMPLO 5.1 Presentamos a continuación una instrucción switch sencilla. En este
ejemplo, suponemos que eleccion es una variable de tipo char
switch (eleccion = getchar ()) {
case ’r’:
case ’R’:
printf ("ROJO");
break;
case ’b’:
case ’B’:
printf ("BLANCO");
Pedro Ramírez <pedroramirez22@gmail.com> 1
2. CENTRO TECNOLÓGICO DE AVANZADA
AREA DE MECATRÓNICA
Código: M06 MICROCONTROLADORES I
Laboratorio: D-19
Duración: 2 Hs INSTRUCCIONES DE CONTROL
break;
case ’a’:
case ’A’:
printf ("AZUL");
}
Por tanto, se presentará ROJO si eleccion representa r o R, se presentará BLANCO si
eleccion representa b o B, y AZUL si eleccion tiene el valor a o A. No se visualizará
nada si eleccion tiene asignado algún otro carácter.
Observe que cada grupo de instrucciones tiene dos etiquetas case para contemplar
mayúsculas y minúsculas. Observe también que cada uno de los dos primeros grupos
acaba con la instrucción break. La instrucción break hace que se transfiera el control
fuera de la instrucción switch, evitando que se ejecute más de un grupo de instrucciones.
Uno de los grupos de instrucciones se puede etiquetar como default. Este grupo se
seleccionará si ninguna de las etiquetas case coincide con el valor de expresión. (Ésta
es una forma conveniente de generar un mensaje de error en rutinas de corrección de
errores.) El grupo default puede aparecer en cualquier lugar dentro de la instrucción
switch (no necesita ser emplazado al final). Si ninguna de las etiquetas case coincide con
el valor de expresión y no se encuentra el grupo default (como en el ejemplo anterior),
la instrucción switch no hará nada.
EJEMPLO 5.2 He aquí una variación de la instrucción switch presentada en el ejem-
plo anterior.
switch (eleccion = toupper(getchar())){
case ’R’:
printf ("ROJO");
break;
case ’B’:
printf ("BLANCO");
break;
case ’A’:
printf ("AZUL");
break;
default:
printf ("ERROR");
}
La instrucción switch contiene ahora un grupo default (que consta de una sola
instrucción), el cual genera un mensaje de error si ninguna de las etiquetas case coincide
con expresión.
Cada uno de los tres primeros grupos de instrucciones tiene ahora una sola etiqueta
case. En este ejemplo no se necesitan etiquetas case múltiples, ya que la función de bi-
blioteca toupper hace que todos los caracteres que se reciban se conviertan a mayúsculas.
Por tanto, eleccion siempre tendrá asignada una letra mayúscula.
Pedro Ramírez <pedroramirez22@gmail.com> 2
3. CENTRO TECNOLÓGICO DE AVANZADA
AREA DE MECATRÓNICA
Código: M06 MICROCONTROLADORES I
Laboratorio: D-19
Duración: 2 Hs INSTRUCCIONES DE CONTROL
5.2.1. LA INSTRUCCIÓN break
La instrucción break se utiliza para terminar la ejecución de una instrucción, como
por ejemplo switch.
La instrucción break se puede escribir sencillamente de la siguiente forma:
break
La instrucción break se ocupa de transferir el control fuera de la instrucción switch
completa, a la primera instrucción que se.encuentre a continuación de ella.
Practica
1. ¿Qué salida producirá el código siguiente, cuando se empotra en un programa
completo y primera-opcion vale 1?¿Y si primera-opcion vale 2?
int primera-opcion;
switch(primera-opcion+1)
{
case 1:
puts("Cordero asado");
break;
case 2:
puts("Chuleta lechal");
break;
case 3:
puts("Chuletón");
case 4:
puts("Postre de Pastel");
break;
default:
puts("Buen apetito");
}
2. Escribir un programa que introduzca el número de un mes (1 a 12) y visualice el
número de días de ese mes.
3. El domingo de Pascua es el primer domingo después de la primera luna llena pos-
terior al equinoccio de primavera, y se determina mediante el siguiente cálculo
sencillo:
A = año mod 19
Pedro Ramírez <pedroramirez22@gmail.com> 3
4. CENTRO TECNOLÓGICO DE AVANZADA
AREA DE MECATRÓNICA
Código: M06 MICROCONTROLADORES I
Laboratorio: D-19
Duración: 2 Hs INSTRUCCIONES DE CONTROL
B = año mod 4
C = año mod 7
D = (19 * A + 24) mod 30
E = (2 * B + 4 * C + 6 * D + 5 ) mod 7
N = (22 + D + E )
Donde N indica el número de día del mes de marzo (si N es igual o menor que
3) o abril (si es mayor que 31). Construir un programa que determine fechas de
domingos de Pascua.
4. Escribir un programa que acepte fechas escritas de modo usual y las visualice como
tres números. Por ejemplo, la entrada
15, Febrero 1989
producirá la salida
15 2 1989
5. Escribir un programa que acepte un número de tres dígitos escrito en palabra y a
continuación los visualice como un valor de tipo entero. La entrada se termina con
un punto. por ejemplo, la entrada
doscientos veinticinco
producirá la salida
225
6. Escribir un programa que calcule el número de días de un mes, dados los valores
numéricos del mes y el año.
7. Escribir y ejecutar un programa que simule un calculador simple. Lee dos enteros
y un carácter. Si el carácter es un +, se imprime la suma; si es un -, se imprime la
diferencia; si es un *, se imprime el producto; si es un /, se imprime el cociente; y
si es un % se imprime el resto. Nota: utilizar la sentencia switch.
Ultima Actualización 7 de marzo de 2017
Pedro Ramírez <pedroramirez22@gmail.com> 4