UNANLEON SENTENCIAS DE CONTROL CONDICIONALES(SWITCH) M.Sc. Ana María Salgado G.
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"); case 'b': printf("op B\n"); case 'c': case 'd': printf("op C o D\n"); 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.
La forma general de esta sentencia es: switch (expresión) case exp1: sentencia 1; sentencia 2; case exp2: sentencia1; sentencia2; case expn: sentencia N; 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 f(t) = T T Si OP = 2 6 * T/2 Si OP = 3,4 1 Para cualquier otro caso. 3 M.Sc. Ana María Salgado G.
Pseudocódigo en PSEINT Proceso funcion Definir OP, T como entero; Definir RES como real; 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 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; 4 M.Sc. Ana María Salgado G.
case 2: RES = pow(t,t); case 3: case 4: RES = 6 * T/2; default: RES = 1; 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. 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) 5 M.Sc. Ana María Salgado G.
case '+': resp = num1 + num2; case '-': resp = num1 - num2; case '*': resp = num1 * num2; case '/': if(num2!= 0) resp = num1 / num2; else printf("division por cero no valida\n"); exit(0); 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 Incremento Profesor adjunto 3.5% Profesor auxiliar 4.1% Profesor asistente 4.8% Profesor titular 5.3% Pseudocódigo en PSEINT: Proceso profesor Definir adjunto, auxiliar, asistente, titular, nivel como entero; Definir sal como real; adjunto <- 1; auxiliar <- 2; asistente <- 3; 6 M.Sc. Ana María Salgado G.
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; 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 Código en lenguaje C: //profesor.c #include <stdio.h> #include <stdlib.h> void main(void) enum profesor adjunto = 1, auxiliar, asistente, titular 7 M.Sc. Ana María Salgado G.
; 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; case auxiliar: sal = sal * 1.0041; case asistente: sal = sal * 1.0048; case titular: sal = sal * 1.0053; default: printf("categoria incorrecta\n"); exit(0); printf("\n\nnivel: %d \tnuevo salario: %.2f\n",nivel,sal); 8 M.Sc. Ana María Salgado G.
Ejemplo #4: Realice un algoritmo que permita la conversión entre euros y pesetas. Pseudocódigo en PSEINT: Proceso conversionmoneda Definir euro, n, x como real; Definir opcion como entero; 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; Código en C: 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 /* 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); 9 M.Sc. Ana María Salgado G.
switch(opcion) case 1: case 2: default: Sentencia switch x=n/euro; printf("\n%g Pesetas son %.2f Euros\n",n,x); x=n*euro; printf("\n%.2f Euros son %g Pesetas\n",n,x); printf("\nopcion Incorrecta"); 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); 10 M.Sc. Ana María Salgado G.
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); default: printf("\nopcion incorrecta\n"); exit(0); /* error; salir de main */ 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"); case 4: case 5: strcpy(estacion,"primavera"); case 7: case 8: strcpy(estacion,"verano"); case 10: case 11: strcpy(estacion,"oto o"); case 3: if(dia < 21) strcpy(estacion,"invierno"); 11 M.Sc. Ana María Salgado G.
else strcpy(estacion,"primavera"); case 6: if(dia < 21) strcpy(estacion,"primavera"); else strcpy(estacion,"verano"); case 9: if(dia < 21) strcpy(estacion,"verano"); else strcpy(estacion,"oto o"); case 12: if(dia < 21) strcpy(estacion,"oto o"); else strcpy(estacion,"invierno"); default: printf("mes invalido"); exit(-1); printf("usted nacio en %s\n",estacion); Sentencia switch 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. Construya un pseudocódigo y el correspondiente programa en C, que permita calcular el valor de f(x) según la siguiente expresión: Y 3 Si (Y mod 4) = 0 f(x) = (Y 2 14) / Y 3 Si (Y mod 4) = 1 Y 3 + 5 Si (Y mod 4) = 2 Si (Y mod 4) = 3 12 M.Sc. Ana María Salgado G.
3. 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 Zona Precio 1 Estados Unidos 0.13 2 Canadá 0.11 5 América del Sur 0.22 6 América Central 0.19 7 México 0.17 9 Europa 0.17 10 Asia 0.20 15 Africa 0.39 20 Oceanía 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. 4. 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 Costo/Cliente/Día 1 2800 2 1950 3 2500 4 1150 5. Construya un programa que al recibir como datos la matrícula, la carrera, el semestre que cursa y el promedio de un alumno de una universidad privada de Lima, Perú, determine si el alumno puede ser asistente de alguna de las carreras que se ofrecen en la universidad. Si el alumno reúne los requisitos planteados en la tabla, se debe escribir su matrícula, la carrera y el promedio correspondiente. Carrera Semestre Promedio Industrial: 1 >=6 >=8.5 Telemática: 2 >=5 >=9.0 Computación: 3 >=6 >=8.8 Mecánica: 4 >=7 >=9.0 13 M.Sc. Ana María Salgado G.
6. En una empresa textil ubicada en La Paz, Bolivia, necesitan un empleado para una sucursal. Construya un programa en C, que compruebe e imprima si un empleado determinado reúne las condiciones necesarias para tal puesto. Las condiciones que estableció la empresa son las siguientes: categoría 3 ó 4 y antigüedad mayor a 5 años, o bien categoría 2 y antigüedad mayor a 7 años. 7. Construya un programa en C que permita convertir de pulgadas a milímetros, de yardas a metros y de millas a kilómetros. Use enumerado. Consideraciones: 1 pulgada equivale a 25.40 milímetros. 1 yarda equivale a 0.9144 metros. 1 milla equivale a 1.6093 kilómetros. 8. Escriba un programa en C que permita realizar la conversión de medidas de pesos, longitud y volumen, de acuerdo con la tabla presentada. Se debe escribir el valor a convertir, la medida en que está expresado el valor, el nuevo valor y la nueva medida correspondiente. Medidas de longitud Medidas de volumen Medidas de peso 1 pulgada = 25.40 milímetros 1 pie 3 = 0.02832 metros 3 1 onza = 28.35 gramos 1 yarda = 0.9144 metros 1 yarda 3 = 0.7646 metros 3 1 libra = 0.45359 kilogramos 1 milla = 1.6093 kilómetros 1 pinta = 0.56826 litros 1 ton. Inglesa = 1.0160 toneladas 1 pulgada 2 = 6.452 centímetros 2 1 galón = 4.54609 litros 1 pie 2 =0.09290 metros 2 1 yarda 2 =0.8361 metros 2 1 acre = 0.4047 hectáreas 1 milla 2 =2.59 kilómetros 2 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. 14 M.Sc. Ana María Salgado G.
Hernández María Lourdes. Diseño estructurado de algoritmos. Diagramas de flujos y pseudocódigos. Universidad de Teuxtepe, México. 15 M.Sc. Ana María Salgado G.