sentencias de control switch_2012

Anuncio
2012
Sentencia de control switch
M.Sc. Ana María Salgado
Universidad Nacional Autónoma
de Nicaragua - León
Abril 2012
Sentencia switch
Unidad IV:
Estructuras de control
Sentencia switch
Selecciona entre varias alternativas dependiendo del valor de una variable.
La estructura switch comienza con la palabra reservada switch seguida de una expresión entre
paréntesis. Luego de esto vienen las etiquetas de selección a través de la palabra reservada
case, ésta palabra debe tener como argumento obligatoriamente constantes enteras, por
ejemplo, int, char, enum, pero no float, o string.
En varios de los casos puede hacerse referencia a una misma acción, para ello se disponen en
secuencia y la última cláusula case es la que hará referencia a la secuencia de instrucciones
asociada.
switch(c)
{
case 'a': printf("Op A\n");
break;
case 'b': printf("Op B\n");
break;
case 'c':
case 'd': printf("Op C o D\n");
break;
default: printf("Op ?\n");
}
Por lo común la última instrucción antes de la siguiente etiqueta es la instrucción break,
ésta palabra reservada provoca el abandono de la estructura switch. Si no existe una
proposición break la ejecución continúa con las instrucciones de la siguiente etiqueta. La
ausencia de instrucciones break es una causa de error frecuente en un switch.
Por último puede haber una instrucción etiquetada como default y representa el caso en
el que el valor de la expresión no coincida con ningún valor de las etiquetas utilizadas. No es
necesario incluir la sentencia default.
2
M.Sc. Ana María Salgado G.
Sentencia switch
La forma general de esta sentencia es:
switch (expresión)
{
case exp1:
sentencia 1;
sentencia 2;
break;
case exp2:
sentencia1;
sentencia2;
break;
case expN:
sentencia N;
break;
default:
sentencia D;
}
Ejemplo 1:
Construya un pseudocódigo y el correspondiente programa en C, que al recibir como datos
dos variables de tipo entero, obtenga el resultado de la siguiente función:
T/5
Si OP = 1
T ** T
Si OP = 2
6 * T/2
Si OP = 3,4
1
Para cualquier otro caso.
f(T) =
3
M.Sc. Ana María Salgado G.
Sentencia switch
Pseudocódigo en PSEINT
Proceso funcion
Escribir "Ingrese la opcion del calculo y el valor entero:";
Leer OP,T;
Segun (OP) Hacer
1:
RES <- T/5;
2:
RES <- T ^ T;
3,4:
RES <- 6 * T/2;
de Otro Modo:
RES <- 1;
FinSegun
Escribir "Resultado:",RES;
FinProceso
4
M.Sc. Ana María Salgado G.
Sentencia switch
Código en C:
//funcion.c
#include <stdio.h>
#include <math.h>
void main(void)
{
int OP, T;
float RES;
printf("Ingrese la opcion del calculo y el valor entero:");
scanf("%d %d",&OP,&T);
switch(OP)
{
case 1:
RES = T/5;
break;
case 2:
RES = pow(T,T);
break;
case 3:
case 4:
RES = 6 * T/2;
break;
default:
RES = 1;
break;
}
printf("\nResultado: %.2f\n",RES);
}
Ejemplo 2:
Realice un programa que simule una calculadora, de tal forma que:
Si el usuario introduce +, sume dos números.
Si el usuario introduce -, reste dos números.
Si el usuario introduce *, multiplique dos números.
Si el usuario introduce /, divida dos números. Asegúrese que el segundo operando no sea
cero, ya que la división por cero no está permitida.
Nota: No se realizó el pseudocódigo correspondiente, ya que PSEINT no permite que la variable
asociada a SEGÚN, sea de tipo carácter.
5
M.Sc. Ana María Salgado G.
Sentencia switch
Código en C:
//calculadora.c
#include <stdio.h>
#include <stdlib.h>
double num1, num2, resp;
char operacion;
void main(void)
{
printf("Esta es una calculadora...\n\n");
printf("Ingrese dos numeros: ");
scanf("%lf %lf",&num1,&num2);
printf("Operacion?");
fflush(stdin);
operacion = getchar();
switch(operacion)
{
case '+':
resp = num1 + num2;
break;
case '-':
resp = num1 - num2;
break;
case '*':
resp = num1 * num2;
break;
case '/':
if(num2 != 0)
resp = num1 / num2;
else
{
printf("Division por cero no valida\n");
exit(0);
}
break;
6
M.Sc. Ana María Salgado G.
Sentencia switch
default:
puts("Operacion invalida");
}
printf("%g %c %g = %g \n\n",num1,operacion,num2,resp);
}
Ejemplo 3:
Construya un pseudocódigo y su correspondiente programa en C, que al recibir como datos el
nivel académico de un profesor de una universidad así como su salario, incremente éste
último siguiendo las especificaciones de la tabla e imprima tanto el nivel del profesor como su
nuevo salario. Use enumerados.
Nivel
Profesor adjunto
Profesor auxiliar
Profesor asistente
Profesor titular
Incremento
3.5%
4.1%
4.8%
5.3%
Pseudocódigo en PSEINT:
Proceso profesor
adjunto <- 1;
auxiliar <- 2;
asistente <- 3;
titular <-4;
Escribir "Categorias de profesor universitario:";
Escribir "---------------------------------------";
Escribir "1. Profesor adjunto";
Escribir "2. Profesor auxiliar";
Escribir "3. Profesor asistente";
Escribir "4. Profesor titular";
Escribir "Ingrese el nivel academico del profesor: ";
Leer nivel;
Escribir "Ingrese el salario: ";
Leer sal;
7
M.Sc. Ana María Salgado G.
Sentencia switch
Segun (nivel) Hacer
adjunto:
sal <- sal * 1.0035;
auxiliar:
sal <- sal * 1.0041;
asistente:
sal <- sal * 1.0048;
titular:
sal <- sal * 1.0053;
de Otro Modo:
Escribir "Categoria incorrecta";
FinSegun
Escribir "Nivel: ",nivel;
Escribir "Nuevo salario: ",sal;
FinProceso
8
M.Sc. Ana María Salgado G.
Sentencia switch
Código en lenguaje C:
//profesor.c
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
enum profesor
{
adjunto = 1,
auxiliar,
asistente,
titular
};
enum profesor nivel;
float sal;
printf("Categorias de profesor universitario:\n");
printf("---------------------------------------\n");
printf("1. Profesor adjunto\n");
printf("2. Profesor auxiliar\n");
printf("3. Profesor asistente\n");
printf("4. Profesor titular\n");
printf("Ingrese el nivel academico del profesor: ");
scanf("%d",&nivel);
printf("Ingrese el salario: ");
scanf("%f",&sal);
switch(nivel)
{
case adjunto:
sal = sal * 1.0035;
break;
case auxiliar:
sal = sal * 1.0041;
break;
case asistente:
sal = sal * 1.0048;
break;
9
M.Sc. Ana María Salgado G.
Sentencia switch
case titular:
sal = sal * 1.0053;
break;
default:
printf("Categoria incorrecta\n");
exit(0);
}
printf("\n\nNivel: %d \tNuevo salario: %.2f\n",nivel,sal);
}
Ejemplo #4:
Realice un algoritmo que permita la conversión entre euros y pesetas.
Pseudocódigo en PSEINT:
Proceso conversionMoneda
euro <-166.386;
Escribir "1-Pesetas a Euros";
Escribir "2-Euros a pesetas";
Escribir "Ingrese la opcion:";
Leer opcion;
Escribir "Introduzca la cantidad: "
Leer n;
Segun opcion Hacer
1:
x <- n/euro;
Escribir n," Pesetas son ",x, " Euros";
2:
x <- n*euro;
Escribir n," Euros son ",x," Pesetas";
De Otro Modo:
Escribir "Opcion Incorrecta";
FinSegun
FinProceso
10
M.Sc. Ana María Salgado G.
Sentencia switch
Diagrama de flujo:
Código en C:
/* Conversión entre euros y pesetas */
#include <stdio.h>
#define euro 166.386
void main(void)
{
float n,x;
int opcion;
printf("Introduzca la cantidad: ");
scanf("%f",&n);
printf(" 1-Ptas a Euros\n 2-Euros a ptas\n");
printf("Ingrese la opcion:");
scanf("%d",&opcion);
switch(opcion)
{
case 1:
x=n/euro;
printf("\n%g Pesetas son %.2f Euros\n",n,x);
break;
case 2:
x=n*euro;
printf("\n%.2f Euros son %g Pesetas\n",n,x);
break;
default:
printf("\nOpcion Incorrecta");
}
}
11
M.Sc. Ana María Salgado G.
Sentencia switch
Ejemplo #5:
Realice un programa que convierta de grados centígrados a Fahrenheit y viceversa. Utilice
enumerados.
//conversionfahrent.c
#include <stdio.h>
#include <stdlib.h>
enum conversion
{
centfahr = 1,
fahrcent
};
enum conversion opcion;
float f, c;
void main(void)
{
printf("1 - Convertir de centigrados a fahrenheit\n");
printf("2 - Convertir de fahrenheit a centigrados\n");
printf("\nIngrese la opcion deseada: ");
scanf("%d", &opcion);
switch (opcion)
{
case centfahr:
printf("\nGrados centigrados?:");
scanf("%f",&c);
f = 9.0/5.0 * c + 32;
printf("%.2f centigrados equivalen a %.2f grados fahrenheit\n\n",c,f);
break;
case fahrcent:
printf("\nGrados fahrenheit?: ");
scanf("%f", &f);
c = 5.0/9.0 * (f - 32);
printf("%.2f fahrenheit equivalen a %.2f grados centigrados\n\n",f,c);
break;
default:
printf("\nOpcion incorrecta\n");
exit(0); /* error; salir de main */
}
}
12
M.Sc. Ana María Salgado G.
Sentencia switch
Ejemplo #6:
En el siguiente programa una persona ingresa el mes y el día de su cumpleaños. La salida es la
estación en que ocurre el nacimiento de la persona: otoño, invierno, primavera o verano. Se
usan los 4 puntos notables en Septiembre 21, Diciembre 21, Marzo 21 y Junio 21 como las
fronteras o límite de las estaciones.
//estanaci.c
#include <stdio.h>
/*IMPRIME LA ESTACION DE NACIMIENTO A PARTIR DEL MES Y DEL DIA*/
int mes,dia;
char estacion[20];
void main(void)
{
printf("Escriba con numeros el mes y el dia de su cumplea¤os:\n");
scanf("%d %d",&mes,&dia);
switch(mes)
{
case 1: case 2:
strcpy(estacion,"invierno");
break;
case 4: case 5:
strcpy(estacion,"primavera");
break;
case 7: case 8:
strcpy(estacion,"verano");
break;
case 10: case 11:
strcpy(estacion,"oto¤o");
break;
case 3:
if(dia < 21)
strcpy(estacion,"invierno");
else
strcpy(estacion,"primavera");
break;
case 6:
if(dia < 21)
strcpy(estacion,"primavera");
else
13
M.Sc. Ana María Salgado G.
Sentencia switch
strcpy(estacion,"verano");
break;
case 9:
if(dia < 21)
strcpy(estacion,"verano");
else
strcpy(estacion,"oto¤o");
break;
case 12:
if(dia < 21)
strcpy(estacion,"oto¤o");
else
strcpy(estacion,"invierno");
break;
default:
printf("Mes invalido");
exit(-1);
}
printf("Usted nacio en %s\n",estacion);
}
Ejercicios propuestos sobre switch
1. Realice un programa tal que, al ingresar un carácter, determine si éste es una vocal en
mayúscula o minúscula, o es una consonante.
2. Realizar un programa que permita ingresar un número correspondiente a los días de
una semana y muestre el nombre del día. Que se permita trabajar hasta que el usuario
indique lo contrario. Use switch.
3. Construya un pseudocódigo y el correspondiente programa en C, que permita calcular el
valor de f(x) según la siguiente expresión:
Y3
Si (Y mod 4) = 0
(Y2 – 14) / Y3
Si (Y mod 4) = 1
Y3 + 5
Si (Y mod 4) = 2
f(x) =
Si (Y mod 4) = 3
14
M.Sc. Ana María Salgado G.
Sentencia switch
4. Una empresa de telecomunicaciones canadiense ofrece servicio de callback a un precio
atractivo. El costo de las llamadas telefónicas depende tanto del lugar de origen de la
llamada como de la zona geográfica en la que se encuentre el país destino. En la
siguiente tabla se presenta el costo por 60 segundos para las llamadas originadas en
México.
Clave
1
2
5
6
7
9
10
15
20
Zona
Estados Unidos
Canadá
América del Sur
América Central
México
Europa
Asia
Africa
Oceanía
Precio
0.13
0.11
0.22
0.19
0.17
0.17
0.20
0.39
0.28
Realice un programa que le permita calcular e imprimir el costo total de una llamada
telefónica, considerando tanto la zona como la duración de la llamada. Escriba la primera
versión usando la clave como selector del switch. Diseñe una segunda versión, utilizando un
enumerado para la zona, siendo ésta el selector del switch.
5.
En un spa de Ixtapan de la Sal, realizaron un análisis de los clientes registrados en los
últimos 5 años, con el objeto de conocer de los gastos de internación de cada cliente. Construya
un programa en C que calcule el costo de internación de un cliente, según los datos de la
siguiente tabla. Se sabe que los clientes mayores de 60 años tienen un descuento del 25% y los
clientes menores de 25 años, de 15%.
Tipo de tratamiento
1
2
3
4
Costo/Cliente/Día
2800
1950
2500
1150
6.
Hacer un programa que imprima el nombre de un artículo, clave, precio original y su
precio con descuento. El descuento lo hace en base a la clave, si la clave es 1 el descuento es del
10% y si la clave es 2 el descuento es del 20% (solo existen dos claves).
7.
Escriba un programa que calcule el importe a pagar por un vehículo al circular por una
autopista. El vehículo puede ser una bicicleta, una moto, un coche, o un camión. Para definir el
conjunto vehículos utilizaremos un tipo enumerado. El importe se calculará según los siguientes
datos:
Un importe fijo de 100 córdobas para las bicicletas.
15
M.Sc. Ana María Salgado G.
Sentencia switch
Las motos y los carros pagarán 30 córdobas por Km.
Los camiones pagarán 30 córdobas por Km más 25 córdobas por Tm
La presentación en pantalla de la solución, será de la forma siguiente:
1. bicicleta
2. moto
3. carro
4. camión
5. salir
Seleccione la opción deseada: 4
Kilómetros y toneladas? 100 50
Importe = 4250
8. Escriba un programa tal, que dados como datos el modelo de un vehículo y su precio,
determine el valor final que debe pagar el comprador. El concesionario está haciendo
descuentos teniendo en cuenta el modelo, con base en la siguiente tabla:
Modelo
Cutlass
Cavalier
Chevy
Century
Descuento
8%
5%
6%
9%
Haga uso de una enumeración. Defínala como un nuevo tipo. Además, utilice break y
una opción por defecto que imprima “El modelo no es válido”.
Bibliografía
Ceballos Francisco Javier. Curso de Programación C/C++ . Segunda Edición. Editorial
RAMA, Madrid, 2002.
Joyanes Aguilar Luis, Zahonero Martínez Ignacio. Programación en C. Metodología,
estructura de datos y objetos. Mc Graw Hill.
Byron S. Gottfried . Programación en C. Mc Graw Hill.
H.M. Dietel – P. J. Dietel . Como Programar en C/C++ . Segunda Edición. Prentice Hall.
Hernández María Lourdes. Diseño estructurado de algoritmos. Diagramas de flujos y
pseudocódigos. Universidad de Teuxtepe, México.
16
M.Sc. Ana María Salgado G.
Descargar