En la lección anterior conocimos la alternativa múltiple, la cual nos permite dividir el flujo de nuestros programas en n caminos distintos. Sin embargo, esta estructura tiene una limitante muy importante: los valores que determinan el flujo que se debe seguir debe ser un valor cierto y conocido, además de pertenecer a alguno de los tipos entero, caracter o cadena únicamente. Pero, ¿qué hacemos si, para determinar el camino a seguir en nuestro algoritmo, necesitamos considerar un rango de valores en lugar de un valor en particular? Por ejemplo, tal vez necesitemos un programa que determine qué dia debe inscribirse a la escuela una persona en base a su fecha de nacimiento; si la fecha está entre el 1 y el 15 de enero se inscribirá en un día particular; si la fecha está entre el 16 y el 31 de enero, la fecha será otra y así sucesivamente. En dicho caso, necesitamos trabajar con rangos en vez de con valores fijos, y ahi es donde la alternativa múltiple falla.
Para resolver este problema, podemos usar las alternativas simple o doble (que ya conocemos) contenidas una dentro de otra. Es decir, una estructura si-entonces puede contener otra, y esta a su vez contener otra y así sucesivamente cualquier cantidad de veces. A estas estructuras las llamamos anidadas o en cascada, y la podemos construir siguiendo este formato:
si (condición1) entonces
<acciones>
si_no
si (condición2) entonces
<acciones>
si_no
si (condición3) entonces
<acciones>
si_no
...
...
fin_si
fin_si
fin_si
Una estructura de selección múltiple puede constar de una serie de alternativas simples o dobles, unas interiores a otras. Como esto puede volverse bastante complejo para que el algoritmo resulte claro de leer, se recomienda usar indentación (sangrías), de modo que exista una correspondencia entre las palabras reservadas si y fin_si.
En este ejemplo, leemos tres números para determinar cuál de ellos es el mayor usando estructuras de selección anidadas:
algoritmo Mayor
var
real: A, B, C, Mayor
inicio
leer(A,B,C)
si (A > B) entonces
si (A > C) entonces
Mayor <- A
si_no
Mayor <- C
fin_si
si_no
si (B > C) entonces
Mayor <- B
si_no
Mayor <- C
fin_si
fin_si
escribir("El número mayor es: " + Mayor)
fin
Estas son algunas pruebas de escritorio para demostrar el funcionamiento del algoritmo en distintos escenarios:
Y este es el programa escrito en el lenguaje de programación C# (¡incluso pueden probar cómo funciona!)
Este otro ejemplo recibe tres números y los muestra ordenados de mayor a menor:
algoritmo Ordenar
var
real: a, b, c
inicio
escribir("Dame 3 números: ")
leer (a, b, c)
si (a > b) entonces
si (b > c) entonces
escribir(a, b, c)
si_no
si (c > a) entonces
escribir(c, a, b)
si_no
escribir(a, c, b)
fin_si
fin_si
si_no
si (a > c) entonces
escribir (b, a, c)
si_no
si (c > b)
escribir(c, b, a)
si_no
escribir(b, c, a)
fin_si
fin_si
fin_si
fin
Mira las pruebas de escritorio de este algoritmo para distintos casos:
Un ejemplo más, para terminar de clarificar este asunto. Ahora tenemos un programa en el cual asignamos a un cliente un estatus y un porcentaje de descuento aplicable de acuerdo a los años de antigüedad que tiene comprando con una tienda. Si tiene hasta 1 año, su estatus será "Nuevo" y no tiene descuento; si tiene hasta 2 años, su estatus será "Regular" y accede a un 3% de descuento; si tiene hasta 4 años, su estatus será "Constante" y su descuento será del 7% y si tiene más de 4 años su estatus será "VIP" y su descuento será del 15%. Mira el algoritmo:
algoritmo Estatus_cliente
var
real: años
entero: descuento
cadena: estatus
inicio
escribir("¿Cuantos años tiene comprando el cliente?")
leer(años)
si (años <= 1) entonces
estatus <- "Nuevo"
descuento <- 0
si_no
si (años <= 2) entonces
estatus <- "Regular"
descuento <- 3
si_no
si (años <= 4) entonces
estatus <- "Constante"
descuento <- 7
si_no
estatus <- "VIP"
descuento <- 15
fin_si
fin_si
fin_si
escribir("Estatus del cliente: " + estatus)
escribir("Descuento aplicado: " + descuento)
fin
Estas son algunas pruebas para este algoritmo:
En cada uno de estos tres ejemplos usamos decisiones sucesivas para poder seleccionar las instrucciones que hemos de ejecutar. Como vemos, las estructuras anidadas nos permiten llegar donde la alternativa múltiple no, aunque el precio puede llegar a ser la legibilidad de nuestros algoritmos.
Esta es la última de las estructuras de selección que conoceremos. En la siguiente lección comenzaremos a analizar otro tipo de estructuras muy útiles: las estructuras de repetición. Pero primero, hay que practicar lo que ya hemos aprendido hasta ahora. ¡Hasta la próxima!
ACTIVIDADES DE APRENDIZAJE
- Reescribe el algoritmo Dia_Semana (primer ejemplo de la lección 13) para usar estructuras de decisión anidadas en lugar de la alternativa múltiple.
- Escribe un algoritmo que tome como datos tres números enteros y nos indique cuál de ellos es el valor central.
- Un ángulo se considera agudo si es menor a 90°, obtuso si es mayor a 90° y menor a 180°, recto si es igual a 90° y llano si es igual a 180°. Utilizando esta información, escribe un algoritmo que acepte la medida de un ángulo en grados y nos muestre el tipo de ángulo correspondiente.
- Los empleados de una fábrica trabajan en dos turnos: diurno y nocturno. Se desea calcular el salario diario de acuerdo con las siguientes condiciones:
- el pago por cada hora diurna es de 5 dólares
- el pago de cada hora nocturna es de 8 dólares
- en caso de que sea domingo, el pago por hora se incrementa en 2 dólares para el turno diurno y en 3 dólares para el turno nocturno
- Una agencia de viajes necesita un programa que le ayude a determinar el costo de un boleto de avión de ida y vuelta para sus clientes, de acuerdo a las siguientes condiciones:
- el precio se calcula de acuerdo a la distancia en kilómetros del destino
- si la distancia es superior a 800 km y el viajero piensa quedarse en el destino por más de 7 días, se le aplica un descuento del 30% sobre el precio final
- el precio por kilómetro es de 8.5 dólares
Enlace: Índice del curso
0 comentarios:
Publicar un comentario