Social Icons

domingo, 2 de abril de 2017

Su estructura

La estructura condicional switch … case en Lenguaje C [Tutorial 5]


La estructura condicional switch … case se utiliza cuando queremos evitarnos las llamadas escaleras de decisiones. La estructura if nos puede proporcionar, únicamente, dos resultados, uno para verdadero y otro para falso. Una estructura switch … case, por su parte, nos permite elegir entre muchas opciones.
Las palabras reservadas en C para la condicional switch … case son:
  • switch
  • case
  • default
Y necesita de una instrucción más, no perteneciente a la programación estructurada en sí, pero que en este caso es necesaria para esta estructura:
  • break
int a;
switch(a)
{
case 0:
    //operaciones a realizar en caso de que a valga 0;
    break;
case 1:
    //mismo proceso
    break;
...
case n:
    //n tiene que ser una constante, o numérica {0,1,2 ....} o una definida #define n 2
    break;
default:
    //en caso de que no se de ninguna de las anteriores hacer...
}
Y esto sería equivalente a:
int a;
if(a==0)
    //operaciones para 0
else if(a==1)
    //operaciones para 1
...
else if(a==n)
    //operaciones para n
else
    //cualquier otro caso
Aunque toda la estructura del if junto con el else correspondiente equivale a una sola instrucción, por lo que las llaves podrían ser omitidas en algunos casos, pero es aconsejable colocarlas por claridad.
Haremos un programa que permita calcular el salario de un trabajador, dependiendo del nivel de antigüedad, para ello hacemo lo siguiente vamos Archivo -> Nuevo -> Proyecto:
Creamos un nuevo proyecto que sea Console Application, seleccionamos C Project y le ponemos el nombre que queramos, que en este caso es: Tutorial_5.
A continuación indicamos donde queremos guardar el proyecto que hemos creado.
Por defecto, Dev-C++ crea el archivo main.c.
Compilamos y Guardamos el main con el nombre que tu quieras, en mi caso le pongo main_Tutorial5.
Ahora borramos lo que tiene el main ya que queremos aprender a programar desde el principio.
Ahora ya podemos escribir nuestro código que seria el siguiente:
// ejemplo con un salario con la condicion switch
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int main()
{
      int nivel;
      float salario, slanuevo;
      printf("Introduce el nivel de antiguedad del trabajador: ");
      scanf("%d",&nivel);
      printf("Introduce tu salario: ");
      scanf("%f",&salario);
      switch (nivel) {
        case 5:
                slanuevo=salario+(salario*.035);
                printf("\nTu salario es:%f\n",slanuevo);
                break;
        case 6:
                slanuevo=salario+(salario*.041);
                printf("\nTu salario es: %f\n",slanuevo);
                break;
        case 7:
                slanuevo=salario+(salario*.048);
                printf("\nTu salario es: %f\n",slanuevo);
                break;
        case 8:
                slanuevo=salario+(salario*.053);
                printf("\nTu salario es: %f\n",slanuevo);
                break;
        default:
                printf("\nTu salario es: %f\n",salario);
}
system("PAUSE");
return 0;
}
Compilamos y verificamos que el programa no tenga errores.
Ahora ejecutamos el programa para comprobar que todo es correcto.
El resultado es el siguiente:
Como podemos observar, el nivel de antigüedad es 7 lo cual significaría un aumento de 48%, lo que nos queda con el nuevo salario con el aumento.
Las sentencias break son muy importantes, ya que el comportamiento normal de un bloque switch es ejecutarlo todo desde la etiqueta case que corresponda hasta el final. Por ello, si no queremos que se nos ejecute más de un bloque, pondremos sentencias break al final de cada bloque excepto el último. Es decir, las etiquetas case son puntos de entrada de la ejecución, y no implican que al acabarse el bloque case la ejecución salte al final del bloque switch. Las etiquetas case siguientes a la que hemos utilizado para entrar son, sencillamente, ignoradas.
El uso de break en la estructura switch-case, si no se encuentra el break, ejecuta todas las instrucciones que se encuentran de ahí para adelante, es decir, si no insertásemos el break, el resultado del case 0: sería el resultado de todos los cases seguidos. Esto se puede aprovechar: Para este ejemplo imaginemos que teniendo una nota nos diga el estado en palabra de la asignatura del alumno:
#include <stdio.h>
main(void)
{
int nota;
printf("introduce tu nota\n");
scanf("%i",&nota);
switch(nota)
{
case 1:
case 2:
case 3: //nótese que pueden estar desordenados
case 0:
case 4:
printf("Suspenso\n");
break;
case 5:
case 6:
printf("Aprobado\n");
break;
case 9:
case 10:
printf("Sobresaliente\n");
break;
case 7:
case 8:
printf("Notable\n");
}
system("pause");
}
Compilamos y verificamos que el programa no tenga errores:
Ahora ejecutamos el programa para comprobar que todo es correcto.
El resultado es el siguiente:
Como se puede observar, el nota introducida era 5,  por lo que entraría en el case 5, pero como no tiene break, pasa al siguiente case que es el 6 e imprime Aprobado, y apenas se encuentra con el break se sale del switch.
En el siguiente ejemplo, pondremos el día de la semana correspondiente a los planetas del sistema solar:
#include <stdio.h>
int dia = 0;
main(void) {
printf("Elige un Dia a la Semana\n\n");
printf("1. Lunes\n");
printf("2. Martes\n");
printf("3. Miercoles\n");
printf("4. Jueves\n");
printf("5. Viernes\n");
printf("6. Sábado\n");
printf("7. Domingo\n");
printf("Que numero de dia de la semana escoges: ");
scanf("%i",&dia);

switch(dia) {
case 1 :
printf("Lunes es, Luna\n");
break;
case 2 :
printf("Martes es, Marte\n");
break;
case 3 :
printf("Miercoles es, Mercurio\n");
break;
case 4 :
printf("Jueves es, Jupiter\n");
break;
case 5 :
printf("Viernes es, Venus\n");
break;
case 6 :
printf("Sábado es, Saturno\n");
break;
case 7 :
printf("Domingo es, Sol\n");
break;
default :
printf("No existe\n");
}
system ("PAUSE");
}
Compilamos y verificamos que el programa no tenga errores:
Ahora ejecutamos el programa para comprobar que todo es correcto.
El resultado es el siguiente:
La estructura anterior, de realizarse con sentencias if, necesitaría cuatro de ellas, resultando un enorme bloque muy difícil de leer. En la mayoría de los casos, además, la sentencia switch proporciona una ganancia en velocidad del código, pues permite al compilador trabajar en base a que se trata de una decisión múltiple para una única variable, cosa que con sentencias if el compilador no tiene por qué detectar.
Como vemos, para cada valor de la variable se ejecuta un bloque de sentencias distinto, en el que no necesitamos llaves. Hay un caso especial, default, que se ejecuta si ningún otro corresponde, y que no es necesario poner. Es, en todo, equivalente al bloque else de una sentencia if.
Ahora escribiremos un programa en Lenguaje C que solicite el ingreso de dos números enteros y que luego permita seleccionar si se sumarán, restarán dividirán o multiplicarán y muestre el resultado por pantalla.
#include <stdio.h>
main(void)
{
 int opcion,a,b,resultado;
 printf("Ingrese un numero entero [a]: ");
 scanf("%d",&a); 
 printf("Ingrese un numero entero [b]: ");
 scanf("%d",&b);  
 printf("Menu\n"); 
 printf("1. Sumar\n"); 
 printf("2. Restar\n");
 printf("3. Dividir\n"); 
 printf("4. Multiplicar\n");
 printf("Elija una operacion: ");
 scanf("%d",&opcion);
 switch(opcion)
 {
  case 1:    
                        resultado=a+b;
   printf("%d + %d = %d\n",a,b,resultado);
   break;
  case 2:    
                        resultado=a-b;
   printf("%d - %d = %d\n",a,b,resultado);
   break;
  case 3:
   resultado=a/b;
   printf("%d / %d = %d\n",a,b,resultado);
   break;
  case 4:
   resultado=a*b;
   printf("%d x %d = %d\n",a,b,resultado);
   break;
  defalut:
   printf("Opcion no valida\n"); 
 }
        system ("PAUSE");
}
Compilamos y verificamos que el programa no tenga errores:
Ahora ejecutamos el programa para comprobar que todo es correcto.
El resultado es el siguiente:
Como se puede observar, los numero introducido eran 2 y 5,  y la operación es la de multiplicar fíjense como da el resultado.

No hay comentarios:

Publicar un comentario

 

Sample text

Sample Text

Sample Text

 
Blogger Templates