Capitulo 3: Sentencias de control múltiple
Ejercicio 1: Determinar el nombre correspondiente a un número de mes y además la estación a la que pertenece, considerando 3 meses completos por estación. PSEUDOCODIGO: Inicio Ingresar número de mes (NM) En CASO que NM SEA Enero, Febrero, Marzo: estación=verano Abril, Mayo, Junio: estación=otoño Julio, Agosto, Setiembre: estación=invierno Octubre, Noviembre, Diciembre: estación=primavera SINO Estación=desconocida Fin SOLUCIÓN int nummes; string mes = "", est = ""; Console.WriteLine("Ingrese el número del mes"); nummes = int.Parse(Console.ReadLine()); switch (nummes) { case 1: mes = "Enero"; break; case 2: mes = "Febrero"; break; case 3: mes = "Marzo"; break; case 4: mes = "Abril"; break; case 5: mes = "Mayo"; break; case 6: mes = "Junio"; break; case 7: mes = "Julio"; break; case 8: mes = "Agosto"; break; case 9:
mes = "Septiembre"; break; case 10: mes = "Octubre"; break; case 11: mes = "Noviembre"; break; case 12: mes = "Diciembre"; break; } if ((nummes >= 1) & (nummes <= 3)) { est = "Verano"; } if ((nummes >= 4) & (nummes <= 6)) { est = "Otoño"; } if ((nummes >= 7) & (nummes <= 9)) { est = "Invierno"; } if ((nummes >= 10) & (nummes <= 12)) { est = "Primavera"; } Console.WriteLine("El mes es: {0}", mes); Console.WriteLine("La estación es: {0}", est); Console.ReadLine(); Ejercicio 2: En una tienda de accesorios para computadoras, el precio de venta de unitario de los diskettes es el mismo para cualquier marca, sin embargo el descuento varía de acuerdo a la marca y se establece en la siguiente tabla. Determinar el importe a pagar por la cantidad de diskettes comprados de una sola marca, considerando que no se paga impuestos. Mostrar importe bruto, descuento e importe a pagar. MARCA DESCUENTO 3M 10 NCR 10 Sentinel 20 Burroughs 25 GoldStar 30 PSEUDOCODIGO: Inicio Escribir marcas a escoger Ingresar marca, precio, cantidad
Calcular importe bruto ImpBruto=cantidad*precio Calcular descuento: En CASO que Marca SEA 3M : Dscto=ImpBruto*Pdscto1 NCR : Dscto=ImpBruto*Pdscto2 Sentinel: Dscto=ImpBruto*Pdscto3 Burroughs: Dscto=ImpBruto*Pdscto4 GoldStar: Dscto=ImpBruto*Pdscto5 Fin del CASO Calcular importe Importe=ImpBruto-Dscto Escribir ImpBruto, Dscto, Importe Fin SOLCUIÓN: { int n; double pu, impb, des=0, impp; string mar = ""; Console.WriteLine("Ingrese la cantidad de diskettes a comprar"); n = int.Parse(Console.ReadLine()); Console.WriteLine("Ingrese la marca del diskette"); mar = Console.ReadLine(); Console.WriteLine("Ingrese el precio unitario del diskette"); pu = double.Parse(Console.ReadLine()); impb = pu * n; switch (mar) { case "3M": des = 0.10 * impb; break; case "NCR": des = 0.15 * impb; break; case "Sentinel": des = 0.20 * impb; break; case "Burroughs": des = 0.25 * impb; break; case "GoldStar": des = 0.30 * impb; break; } impp = impb - des; Console.WriteLine("Los importes son:"); Console.WriteLine("Importe Bruto: {0}", impb); Console.WriteLine("Descuento: {0}", des); Console.WriteLine("Importe a pagar: {0}", impp); Console.ReadLine(); }
Ejercicio 3: Determinar el importe a pagar por un alumno de un instituto cuya cuota tiene un porcentaje de descuento que se establece en la siguiente tabla y está en función al colegio de procedencia del alumno; asimismo los importes están exonerados por impuestos. INSTITUTOS COLEGIO Nacional Particular
A 50 25
B 40 20
C 30 15
PSEUDOCODIGO: Inicio Ingresar Instituto, Colegio, Cuota Calcular Descuento: En CASO que Instituto SEA A en: CASO que Colegio SEA Nacional: Dscto=Cuota*Pdna Particular: Dscto=Cuota*Pdpa FIN del CASO B en: CASO que Colegio SEA Nacional: Dscto=Cuota*PdnB Particular: Dscto=Cuota*PdpB FIN del CASO C en: CASO que Colegio SEA Nacional: Dscto=Cuota*PdnC Particular: Dscto=Cuota*PdpC FIN del CASO FIN del CASO Calcular importe: Importe=Cuota-Dscto Escribir importe Fin SOLCUIÓN: { int op1, op2; double cuota, des = 0, imp; Console.WriteLine("Ingrese la cuota"); cuota = double.Parse(Console.ReadLine()); Console.WriteLine("MENU"); Console.WriteLine("1..............Nacional"); Console.WriteLine("2............Particular"); Console.WriteLine("Ingrese el número del instituto al que pertenece"); op1 = int.Parse(Console.ReadLine());
Console.WriteLine("MENU"); Console.WriteLine("1..............A"); Console.WriteLine("2..............B"); Console.WriteLine("3..............C"); Console.WriteLine("Ingrese el número de la escuela al que pertenece"); op2 = int.Parse(Console.ReadLine()); if (op1 == 1) { switch (op2) { case 1: des = cuota * 0.50; break; case 2: des = cuota * 0.40; break; case 3: des = cuota * 0.30; break; } } if (op1 == 2) { switch (op2) { case 1: des = cuota * 0.25; break; case 2: des = cuota * 0.20; break; case 3: des = cuota * 0.15; break; } } imp = cuota - des; Console.WriteLine("El importe a pagar es: {0}", imp); Console.ReadLine(); } Ejercicio 4: Validar el ingreso de una fecha en el formato día, mes, año numéricos determinando si es correcta o no, mostrando el mensaje correspondiente. Considerar años bisiestos. PSEUDOCODIGO: Inicio Ingresar día, mes, año Evaluar valores ingresados SI (Día está en (1...31)) Y
(Mes está en (1...12))Y (Año está en (1...99)), ENTONCES Correcto=verdad SINO Correcto=falso FIN del SI SI correcto es verdad, ENTONCES Inicio En CASO que mes SEA 1, 3, 5, 7 8, 10, 12 : Dmáx=31 4, 6, 9, 11 : Dmáx=30 2 : SI Año es bisiesto, ENTONCES Dmáx=29 SINO Dmáx=38 FIN del SI FIN del CASO SI (Día> Dmáx), ENTONCES Escribir fecha correcta SINO Escribir fecha incorrecta Fin del SI Fin SOLUCIÓN: { int mes, año, op = 0; double dia; Console.WriteLine("Ingrese el número del año"); año = int.Parse(Console.ReadLine()); if ((año < 1) | (año > 99)) { Console.WriteLine("No existe ese número de día"); Console.ReadLine(); } else { Console.WriteLine("Ingrese el número del mes"); mes = int.Parse(Console.ReadLine()); if ((mes < 1) | (mes > 12)) { Console.WriteLine("No existe ese número de mes"); Console.ReadLine(); } else {
Console.WriteLine("¿El año es bisiesto?"); Console.WriteLine("1.................SI"); Console.WriteLine("0 u otro número...NO"); op = int.Parse(Console.ReadLine()); Console.WriteLine("Ingrese el número del día"); dia = double.Parse(Console.ReadLine()); if (op == 1) { switch (mes) { case 1: if ((dia < 1) | (dia > 31)) { Console.WriteLine("La fecha es incorrecta"); Console.ReadLine(); } else { Console.WriteLine("La fecha es correcta"); Console.ReadLine(); } break; case 2: if ((dia < 1) | (dia > 29)) { Console.WriteLine("La fecha es incorrecta"); Console.ReadLine(); } else { Console.WriteLine("La fecha es correcta"); Console.ReadLine(); } break; case 3: if ((dia < 1) | (dia > 31)) { Console.WriteLine("La fecha es incorrecta"); Console.ReadLine(); } else { Console.WriteLine("La fecha es correcta"); Console.ReadLine(); } break; case 4:
if ((dia < 1) | (dia > 30)) { Console.WriteLine("La fecha es incorrecta"); Console.ReadLine(); } else { Console.WriteLine("La fecha es correcta"); Console.ReadLine(); } break; case 5: if ((dia < 1) | (dia > 31)) { Console.WriteLine("La fecha es incorrecta"); Console.ReadLine(); } else { Console.WriteLine("La fecha es correcta"); Console.ReadLine(); } break; case 6: if ((dia < 1) | (dia > 30)) { Console.WriteLine("La fecha es incorrecta"); Console.ReadLine(); } else { Console.WriteLine("La fecha es correcta"); Console.ReadLine(); } break; case 7: if ((dia < 1) | (dia > 31)) { Console.WriteLine("La fecha es incorrecta"); Console.ReadLine(); } else { Console.WriteLine("La fecha es correcta"); Console.ReadLine(); } break;
case 8: if ((dia < 1) | (dia > 31)) { Console.WriteLine("La fecha es incorrecta"); Console.ReadLine(); } else { Console.WriteLine("La fecha es correcta"); Console.ReadLine(); } break; case 9: if ((dia < 1) | (dia > 30)) { Console.WriteLine("La fecha es incorrecta"); Console.ReadLine(); } else { Console.WriteLine("La fecha es correcta"); Console.ReadLine(); } break; case 10: if ((dia < 1) | (dia > 31)) { Console.WriteLine("La fecha es incorrecta"); Console.ReadLine(); } else { Console.WriteLine("La fecha es correcta"); Console.ReadLine(); } break; case 11: if ((dia < 1) | (dia > 30)) { Console.WriteLine("La fecha es incorrecta"); Console.ReadLine(); } else { Console.WriteLine("La fecha es correcta"); Console.ReadLine(); }
break; case 12: if ((dia < 1) | (dia > 31)) { Console.WriteLine("La fecha es incorrecta"); Console.ReadLine(); } else { Console.WriteLine("La fecha es correcta"); Console.ReadLine(); } break; } } else { switch (mes) { case 1: if ((dia < 1) | (dia > 31)) { Console.WriteLine("La fecha es incorrecta"); Console.ReadLine(); } else { Console.WriteLine("La fecha es correcta"); Console.ReadLine(); } break; case 2: if ((dia < 1) | (dia > 28)) { Console.WriteLine("La fecha es incorrecta"); Console.ReadLine(); } else { Console.WriteLine("La fecha es correcta"); Console.ReadLine(); } break; case 3: if ((dia < 1) | (dia > 31)) { Console.WriteLine("La fecha es incorrecta");
Console.ReadLine(); } else { Console.WriteLine("La fecha es correcta"); Console.ReadLine(); } break; case 4: if ((dia < 1) | (dia > 30)) { Console.WriteLine("La fecha es incorrecta"); Console.ReadLine(); } else { Console.WriteLine("La fecha es correcta"); Console.ReadLine(); } break; case 5: if ((dia < 1) | (dia > 31)) { Console.WriteLine("La fecha es incorrecta"); Console.ReadLine(); } else { Console.WriteLine("La fecha es correcta"); Console.ReadLine(); } break; case 6: if ((dia < 1) | (dia > 30)) { Console.WriteLine("La fecha es incorrecta"); Console.ReadLine(); } else { Console.WriteLine("La fecha es correcta"); Console.ReadLine(); } break; case 7: if ((dia < 1) | (dia > 31)) {
Console.WriteLine("La fecha es incorrecta"); Console.ReadLine(); } else { Console.WriteLine("La fecha es correcta"); Console.ReadLine(); } break; case 8: if ((dia < 1) | (dia > 31)) { Console.WriteLine("La fecha es incorrecta"); Console.ReadLine(); } else { Console.WriteLine("La fecha es correcta"); Console.ReadLine(); } break; case 9: if ((dia < 1) | (dia > 30)) { Console.WriteLine("La fecha es incorrecta"); Console.ReadLine(); } else { Console.WriteLine("La fecha es correcta"); Console.ReadLine(); } break; case 10: if ((dia < 1) | (dia > 31)) { Console.WriteLine("La fecha es incorrecta"); Console.ReadLine(); } else { Console.WriteLine("La fecha es correcta"); Console.ReadLine(); } break; case 11: if ((dia < 1) | (dia > 30))
{ Console.WriteLine("La fecha es incorrecta"); Console.ReadLine(); } else { Console.WriteLine("La fecha es correcta"); Console.ReadLine(); } break; case 12: if ((dia < 1) | (dia > 31)) { Console.WriteLine("La fecha es incorrecta"); Console.ReadLine(); } else { Console.WriteLine("La fecha es correcta"); Console.ReadLine(); } break; } } } } } Ejercicio 5: Evaluar una expresión de 2 operandos enteros de acuerdo al operador que se elija, mostrar el resultado considerando la posibilidad que en la división se intente dividir por 0 para lo cual el resultado debe ser también 0 (aun cuando se sabe matemáticamente que una división por cero tiende al infinito). Los operadores permitidos son solamente lo siguiente. + * & % ^ PSEUDOCODIGO: Inicio Escribir operadores a escoger Ingresar operadores
: SUMA : RESTA RESTA : MULTIPLICACION : DIVISION ENTERA : RESIDUO : POTENCIA
Ingresar 2 números enteros: O1, O2 Determinar Resultado En CASO que Operador SEA Mas : resultado=O1+O2 Menos: resultado=O1-O2 Por : resultado=O1*O2 Entre : si O2<>0 ENTONCES Resultado = entero (O1/O2) SINO Resultado= 0 Fin del si Residuo: resultado=residuo (O1/O2) Potencia: resultado= O1 elevado a la potencia del O2) FIN del CASO Escribir resultado Fin SOLUCIÓN: { double a, b, c = 0; int op = 0; Console.Clear(); Console.WriteLine(".........MENU..........."); Console.WriteLine("1...................suma"); Console.WriteLine("2..................resta"); Console.WriteLine("3.........multiplicación"); Console.WriteLine("4...............división"); Console.WriteLine("5................residuo"); Console.WriteLine("6...............potencia"); Console.WriteLine("Ingrese el número de la operación a usar"); op = int.Parse(Console.ReadLine()); Console.WriteLine("Ingrese primer número"); a = double.Parse(Console.ReadLine()); Console.WriteLine("Ingrese segundo número"); b = double.Parse(Console.ReadLine()); switch (op) { case 1: c = a + b; break; case 2: c = a - b; break; case 3: c = a * b; break; case 4: if (b == 0) { c = 0;
} else { c = a / b; } break; case 5: c = a % b; break; case 6: c = Math.Exp(b * Math.Log(a)); break; } Console.WriteLine("El resultado es: {0}", c); Console.ReadLine(); } Ejercicio 6: En una universidad se ha establecido los siguientes puntajes de ingresos a sus respectivas facultades: FACULTAD PUNTAJE MINIMO Sistemas 100 Electrónica 90 Industrial 80 Administración 70 De acuerdo al puntaje obtenido por un postulante determinar la facultad a la cual ingreso o dar un mensaje correspondiente para el caso que no ingrese. PSEUDOCODIGO: Inicio Ingresar puntaje obtenido: P Determinar facultad de ingreso: En CASO que puntaje SEA 70…79 facultad=Administración 80…89 facultad=Industrial 90…99 facultad=Electrónica 100…110 facultad=Sistemas
SINO Facultad=Ninguna Fin del CASO Escribir facultad Fin SOLUCIÓN: { float nota;
string c = ""; Console.WriteLine("Ingrese el puntaje obtenido en el examen"); nota = float.Parse(Console.ReadLine()); if ((nota >= 70) & (nota < 80)) { c = "Administración"; } if ((nota >= 80) & (nota < 90)) { c = "Industrial"; } if ((nota >= 90) & (nota < 100)) { c = "Electrónica"; } if ((nota >= 100) & (nota <= 110)) { c = "Sistemas"; } if ((nota < 70) | (nota > 110)) { c = "Ninguna"; } Console.WriteLine("La Facultad a la cual ingresó es: {0}", c); Console.ReadLine(); } Ejercicio 7: Una tienda distribuidora de ropa ha establecido porcentajes de descuento sobre el monto comprado de la siguiente forma: Asdfghj Origen/Talla Nacional Importado
Hombres S M L 10 12 15 05 07 10
Mujeres S M L 15 17 20 07 09 12
Determinar y mostrar, para un comprador, el monto comprado, el importe del descuento y el monto a pagar. SOLUCIÓN: { double monc, des = 0, monp; int op1, op2, op3; Console.WriteLine("Ingrese monto de compra"); monc = double.Parse(Console.ReadLine()); Console.WriteLine("........MENU.........");
Console.WriteLine("1..............Hombre"); Console.WriteLine("2...............Mujer"); Console.WriteLine("Ingrese el número del sexo al que pertenece"); op1 = int.Parse(Console.ReadLine()); Console.WriteLine("........MENU........."); Console.WriteLine("1............Nacional"); Console.WriteLine("2...........Importado"); Console.WriteLine("Ingrese el número del origen al que pertenece"); op2 = int.Parse(Console.ReadLine()); Console.WriteLine("........MENU........."); Console.WriteLine("1...................S"); Console.WriteLine("2...................M"); Console.WriteLine("3...................L"); Console.WriteLine("Ingrese el número del tamaño de prenda al cual que pertenece"); op3 = int.Parse(Console.ReadLine()); switch (op1) { case 1: switch(op2) { case 1: switch(op3) { case 1: des = 0.10 * monc; break; case 2: des = 0.12 * monc; break; case 3: des = 0.15 * monc; break; } break; case 2: switch (op3) { case 1: des = 0.05 * monc; break; case 2: des = 0.17 * monc; break; case 3: des = 0.10 * monc; break; } break; } break; case 2: switch (op2)
{ case 1: switch (op3) { case 1: des = 0.15 * monc; break; case 2: des = 0.17 * monc; break; case 3: des = 0.20 * monc; break; } break; case 2: switch (op3) { case 1: des = 0.07 * monc; break; case 2: des = 0.09 * monc; break; case 3: des = 0.12 * monc; break; } break; } break; } monp = monc - des; Console.WriteLine("Los importes son:"); Console.WriteLine("Monto de compra: {0}", monc); Console.WriteLine("Descuento: {0}", des); Console.WriteLine("Monto de pago: {0}", monp); Console.ReadLine(); } Ejercicio 8: Una tienda comercial ofrece ventas al crédito financiadas en tres formas como se indica a continuación: TIPO FINANCIAMIENTO 1 2 3
% INTERES 5 10 15
% CUOTA INICIAL 60 50 35
NÚMERO LETRAS 2 4 6
El cliente deberá firmar antes de la financiación el monto de la compra, el cual es afecto a un 10% de impuesto, por lo que el monto de la factura es igual al monto de la compra más
el importe del impuesto. Luego que el cliente elige el tipo de financiamiento que le convenga, se mostrara lo siguiente: monto de la factura, monto de los intereses, nuevo monto de la factura (incluyendo intereses), monto de la cuota inicial y el monto de cada letra por pagar (nuevo monto de factura menos monto de cuota inicial entre número de letras). SOLUCIÓN: { double monc, monf1, inte = 0, monf2 = 0, ci = 0, monl = 0; int op; Console.WriteLine("Ingrese el monto de compra"); monc = double.Parse(Console.ReadLine()); monf1 = monc + (0.10 * (monc)); Console.WriteLine("...................................MENU.................................."); Console.WriteLine("..TIPO DE FINANCIAMIENTO....% INTERES....% CUOTA INICIAL....NUMERO LETRAS"); Console.WriteLine(".............1..................5................60...............2......"); Console.WriteLine(".............2.................10................50...............4......"); Console.WriteLine(".............3.................15................35...............6......"); Console.WriteLine("Ingrese el tipo de financiamiento"); op = int.Parse(Console.ReadLine()); switch (op) { case 1: inte = 0.05 * monf1; monf2 = monf1 + inte; ci = 0.60 * monf2; monl = (monf2 - ci) / 2; break; case 2: inte = 0.10 * monf1; monf2 = monf1 + inte; ci = 0.50 * monf2; monl = (monf2 - ci) / 4; break; case 3: inte = 0.15 * monf1; monf2 = monf1 + inte; ci = 0.35 * monf2; monl = (monf2 - ci) / 6; break; } Console.WriteLine("Los importes son:"); Console.WriteLine("Monto de factura: {0}", monf1); Console.WriteLine("Monto de interés: {0}", inte); Console.WriteLine("Nuevo monto de factura: {0}", monf2); Console.WriteLine("Cuota inicial: {0}", ci);
Console.WriteLine("Monto de cada letra por pagar: {0}", monl); Console.ReadLine(); } ALGOTIMOS PROPUESTOS
1.- Los dios de la semana se identifican por un número de la siguiente forma: 0 para Domingo, 1 para Lunes, 2 para Martes, etc. Determinar el día que corresònda a un número ingresado dando un mensaje adecuado para el caso que el número dado no corresponda a ningún día de la semana. PSEUDOCODIGO: SOLUCIÓN: 2.- En un olimpiada de tiro al blanco se llega a un acuerdo entre los participantes para que el puntaje obtenido sea calculado en base al puntaje original (0 al 10) alcanzado en el tiro, multiplicado por un factor: PUNTAJE ORIGINAL FACTOR 0 0 1..5 6 6..8 9 .. 9,10 10 Para un tiro realizado determinar su puntaje correspondiente. PSEUDOCODIGO: SOLUCIÓN: 3.- Una tienda de ropa ha establecido los porcentajes de descuento, que se indican a continuación, de acuerdo a ciertas características del comprador: nacionalidad (1,2) y del producto que compra: sexo (H, M), talla (niño, joven, adulto). Se sabe que una persona puede comprar varios productos por lo que se desea mostrar como resultado lo siguiente: nombre del comprador, cantidad de productos comprados, importe comprado, importe descontado y el importe a pagar; para la compra de una persona termina cuando al ingresar el nombre del comprador se presiona ENTER.
NACIOLNALIDAD 1 2 PSEUDOCODIGO:
NIÑO SEXO
JOVEN SEXO
ADULTO SEXO
H M 5 4 4 5
H 7 9
H 10 12
M 9 7
M 12 10
SOLUCIÓN: 4.- EL TURBO PASCAL dispone de varios tipos de dato entero que son: ShortInt, Byte, Integer, Word, LongInt; cada uno de los cuales tiene un rango de valores enteros que lo definen de la siguiente manera: TIPO DE DATO ShortInt Byte Integer Word LongInt
RANGO DE VALORES DESDE HASTA -128 +127 0 255 -32768 +32767 0 65535 -2147483648 +2147483647
Al ingresar la primera letra del tipo de dato mostrar su rango de valores correspondientes 5.- Ingresar un número en forma de ARABICO (entero) y mostrar su equivalente en ROMANO asumiendo que el número ingresado es correcto y no debe ser mayor a 3999. PSEUDOCODIGO: SOLUCIÓN: