16. C++ || Sentencia de control switch

Pasamos al siguiente apartado en nuestro curso C++, ahora vamos a ver lo que es la sentencia de control switch y finalizaremos con algunos ejercicios, luego de esto veremos las estructuras de control en C++.





La sentencia Switch


La sentencia de control switch es una forma de escojer entre una y más opciones, este tipo de selección puede aceptar tipos de datos int o char, pero nunca del tipo double. Su sintaxis es:

switch (selector)
{
case opicion1:
sentencia1;
break;
case opicion2:
sentencia2;
break;
.
.
.
case opcion_n:
sentencia_n;
break;
default: //opcional
sentencia_m;
}

  • selector se compara y evalúa con cada una de las opciones de la etiqueta case (la expresión selector puede ser de tipo int, char, bool pero nunca de tipo float o double)
  • case son las distintas acciones que se podrán realizar siempre y cuando coincida con la expresión selector
  • opcion se puede ver como una condición, si es igual a la expresión selector, se procederá a ejecutar sus sentencias
  • sentencia acciones que se ejecutan en el programa si y solo si opcion es igual a selector
  • break sentencia que siempre debe ir en cada case
  • default es opcional de usar en nuestros programas C++, si ninguna opción es igual a la expresión selector, se pasa a ejecutar este bloque de acciones

Aquí, si el valor de la expresión selector es igual a alguna de las etiquetas case, por ejemplo, opcion2, entonces se ejecutarán las acciones de la sentencia2.

Ejemplo:

switch (x) 
{ 
 case 1: 
  cout<<"Numero 1"; 
  break; 
 case 2: 
  cout<<"Numero 2"; 
  break; 
 case 3: 
  cout<<"Numero 3"; 
  break; 
 default: 
  cout<<"Numero fuera de rango"; 
}

Note que x es una variable, dependiendo del valor que tome x, se va a comparar con cada una de las etiquetas case, en caso de ser iguales, procederá a ejecutar las sentencias de ese case, en caso de que ningún case sea igual a x, entonces se ejecuta la opción default

cout<<"Numero fuera de rango";

La opción default es opcional, si no estuviera y x no fuera igual a ninguna de las etiquetas case, no ocurriría nada en el programa. Ejemplo:

cout<<"Indique el tipo de comprador"; 
char tipo; 
cin>> tipo; 

switch (tipo) 
{ 
 case 'a': case 'A': 
  cout<<"Tipo A"; 
  break; 
 case 'b': case 'B': 
  cout<<"Tipo B"; 
  break; 
 case 'c': case 'C': 
  cout<<"Tipo C"; 
  break; 
}

Aquí no hemos usado el default porque como dije, es opcional, algo que destacar es la implementación de dos etiquetas case juntas

case 'a': case 'A':

Esto se puede hacer, incluso con más etiquetas case, recuerda que las etiquetas case son opciones, es decir, si la variable tipo es igual a 'a' o es igual a 'A' entonces escribir Tipo A.

Nota: puede usar tantos case sean necesarios para ejecutar una misma acción, algo que no se debe hacer es usar la misma etiqueta case dos veces.

Nota: si se olvidan del break en la sentencia switch, el compilador no mostrará un mensaje de error, lo que sí va a a ocurrir es que la sentencia asociada con la etiqueta, jamás se ejecutará. La sentencia switch en C++ es muy útil para implementar menús, imaginen el menú de un restaurante, de una venta de diferentes helados, todos tendrían múltiples opciones. La sentencia switch en c++ es similar a la sentencia if-else, para ver eso veremos un claro ejemplo.

Usando la sentencia if-else en C++

if ((letra == 'a') || (letra == 'A')) 
 { cout<<"Es una vocal"<<endl; } 
else if ((letra == 'e') || (letra == 'E')) 
 { cout<<"Es una vocal"<<endl; } 
else if ((letra == 'i') || (letra == 'I')) 
 { cout<<"Es una vocal"<<endl; } 
else if ((letra == 'o') || (letra == 'O')) 
 { cout<<"Es una vocal"<<endl; } 
else if ((letra == 'u') || (letra == 'U')) 
 { cout<<"Es una vocal"<<endl; } 
else 
 { cout<<"No es una vocal"<<endl; } 

Usando la sentencia de control switch en C++

switch (letra) 
{ 
 case 'a': case 'A': 
 case 'e': case 'E': 
 case 'i': case 'I': 
 case 'o': case 'O': 
 case 'u': case 'U': 
  cout<<"Es una vocal"; 
  break; 
 default: 
  cout<<"No es una vocal"; 
} 

Nota: después de un default no se coloca la sentecia break.



1 comentario: