• No se han encontrado resultados

Sentencia de control switch

N/A
N/A
Protected

Academic year: 2021

Share "Sentencia de control switch"

Copied!
16
0
0

Texto completo

(1)

2012

M.Sc. Ana María Salgado

Universidad Nacional Autónoma

de Nicaragua - León

Sentencia de control switch

(2)

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.

(3)

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.

(4)

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

(5)

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.

(6)

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;

(7)

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 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;

(8)

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

(9)

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;

(10)

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

(11)

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"); } }

(12)

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 */ }

(13)

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

(14)

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 Si (Y mod 4) = 3 f(x) =

(15)

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 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.

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 Costo/Cliente/Día

1 2800

2 1950

3 2500

4 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:

(16)

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 Descuento

Cutlass 8%

Cavalier 5%

Chevy 6%

Century 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

Referencias

Documento similar

El programa inició en febrero de 2017, se logró la captación de estudiantes de alto nivel académico para que, como instructores, y bajo la supervisión de un profesor

Programa de Desarrollo de Habilidades Metacognitivas para Mejorar el Desempeño Académico de los Alumnos de Nivel Medio Superior de la Universidad Autónoma del Estado de México En

Concurso de Oposición para el Ingreso de Profesora o Profesor de Tiempo Completo del Programa Académico de Ingeniería Mecatrónica.. La Universidad Politécnica de Aguascalientes

2012 Programa de Estímulos a la Productividad Académica NIVEL 4 UNIVERSIDAD VERACRUZANA México Desempeño Académico Período 2009-2011 2012 Reconocimiento por

Por lo tanto, la universidad, como institu- ción educativa de máximo nivel académico, no debe ser ajena a todas estas consideracio- nes y el profesor universitario, como profe-

“NIVEL DE INFLUENCIA DE LOS METODOS DE ENSEÑANZA EN LA FORMACION PROFESIONAL DE LOS ALUMNOS DEL PROGRAMA ACADÉMICO DE CONTABILIDAD DE LA UNIVERSIDAD NACIONAL

FORMATO DE DATOS DEL EXPERTO UNIVERSIDAD CATÓLICA ANDRÉS BELLO FACULTAD DE HUMANIDADES Y EDUCACIÓN PROGRAMA EDUCACIÓN, MENCIÓN PROCESOS DE APRENDIZAJE Estimado Experto / Profesor:

Es el proceso mediante el cual un aspirante a estudiar en la Universidad en el programa académico de su interés, diligencia el formulario de inscripción en