Hasta ahora siempre que se presentan bifurcaciones en un programa lo resolvemos con una estructura condicional if, tambiƩn vimos en un concepto anterior el operador condicional ?:
Ahora veremos que en el lenguaje C existe una estructura condicional que nos permite seleccionar un camino de un conjunto de caminos dependiendo de una condiciĆ³n.
La estructura switch remplaza en muchas situaciones, si bien no en todas, a un conjunto de if.
Veremos varios ejemplos y la sintaxis propuesta del switch.
Problema 1:
Ingresar por teclado un valor entero comprendido entre 1 y 5. Mostrar en castellano el valor ingresado o un mensaje indicando que se cargĆ³ un valor fuera de rango.
Programa: programa190.c
La estructura comienza con la palabra clave switch seguida entre parƩntesis por una variable de tipo entera (puede ser char, short int, int, long int y long long int)
Luego entre llaves indicamos los distintos valores que puede tomar la variable y que hacer ante dichos valores.
La palabra clave case le sigue el valor en particular a analizar, por ejemplo si la variable valor tiene almacenado un 3 luego entra por el "case 3" y pasa a ejecutar todas las instrucciones seguidas despuƩs de los dos puntos.
La palabra break indica salir del switch.
Si ninguno de los case se verifica verdadero luego ejecuta las instrucciones que indicamos luego de la palabra clave defalut:
El bloque del default es opcional en un switch similar a un else en un if.
Este problema lo venĆamos resolviendo con una serie de if anidados:
#include<stdio.h> #include<conio.h> int main() { int valor; printf("Ingrese un valor entre 1 y 5:"); scanf("%i",&valor); if (valor==1) { printf("Uno"); } else { if (valor==2) { printf("Dos"); } else { if (valor==3) { printf("Tres"); } else { if (valor==4) { printf("Cuatro"); } else { if (valor==5) { printf("Cinco"); } else { printf("El valor esta fuera de rango"); } } } } } getch(); return 0; }
Podemos ver que el empleo del switch nos genera un algoritmo mucho mƔs compacto.
Problema 2:
Ingresar por teclado dos valores enteros. Seguidamente solicitar el ingreso de un caracter '+','-','*' o '/'. Dependiendo del operador ingresado sumar, restar, multiplicar o dividir los valores ingresados. Si no se ingresa un operador vƔlido no hacer nada.
Programa: programa191.c
En este problema ingresamos por teclado un caracter y dependiendo de este tenemos que sumar, restar, multiplicar o dividir los dos valores ingresados:
switch (operacion) { case '+':resultado=valor1+valor2; printf("La suma es:%i",resultado); break; case '-':resultado=valor1-valor2; printf("La resta es:%i",resultado); break; case '*':resultado=valor1*valor2; printf("El producto es:%i",resultado); break; case '/':resultado=valor1/valor2; printf("La division es:%i",resultado); break; }
El comando break en cada caso es fundamental para el correcto funcionamiento de este problema, puede probar de borrar todos los break y luego ejecutar el programa, cargar dos enteros y solicitar que se sumen, veremos que nos muestran la suma, resta, multiplicaciĆ³n y divisiĆ³n.
Si no se disponen los break luego que un case es verdadero todos los otros case se ejecutan sin analizar los otros case.
Problema 3:
Ingresar por teclado una palabra en minĆŗsculas y luego contar la cantidad de vocales y consonantes que tiene.
Programa: programa192.c
Este problema muestra que en ciertas circunstancias es conveniente no disponer break en case. Si la letra que estamos analizando es una vocal luego uno de los cinco case se verifica verdadero por lo que se ejecutan todos los case inclusive el case 'u' donde se incrementa el contador "vocales".
TambiĆ©n podemos ver que un case puede tener un bloque de instrucciones a ejecutar vacĆo.
Para ver que se utiliza esta estructura condicional podemos mostramos una de las tantas funciĆ³n del cĆ³digo fuente del sistema operativo Linux donde la implementa:
Problema propuesto
- Confeccionar un programa que permita administrar un vector de 5 enteros.
Mostrar un menĆŗ de opciones:1 - Cargar el vector. 2 - Mostrarlo 3 - Imprimir el mayor 4 - Imprimir el menor 5 - Finalizar el programa
Utilizar un switch para la selecciĆ³n de la opciĆ³n y la llamada a la funciĆ³n respectiva.
No hay comentarios:
Publicar un comentario