sábado, 11 de abril de 2015

Lógica de Programación (13) - Alternativa múltiple (segun_sea, caso)

Hemos conocido ya las alternativas simple y doble, las cuales nos proporcionan uno o dos caminos alternativos para nuestros programas, respectivamente. Sin embargo, ¿qué pasaría si necesitamos más de dos opciones? Por ejemplo, en el caso de la resolución de una ecuación de segundo grado (cuyo algoritmo ya resolvimos en la lección anterior), nos hace falta considerar una opción: que el discriminante (b**2-4*a*c) sea igual a cero. Este problema puede resolverse de dos maneras: usando estructuras dobles anidadas o en cascada (como veremos más delante) o mediante el uso de la alternativa múltiple.



La alternativa múltiple evalúa una expresión que puede tomar n valores distintos. Según sea el valor que tome la expresión, el flujo del programa seguirá un camino determinado entre los n posibles.

Al escribir algoritmos, la alternativa múltiple se representa de este modo:

segun_sea (expresion) hacer
   caso valor_1:
         instrucciones_1
   caso valor_2:
         instrucciones_2
   caso valor_3:
         instrucciones_3
   ...
   caso valor_n:
         instrucciones_n
   [otros:
         instrucciones_otros]
fin_segun

Sobre esta estructura, podemos comentar lo siguiente:
  • la expresión que define el camino que habrá de seguirse puede ser desde una simple variable hasta una expresión más compleja, aunque cabe señalar que el resultado de esta expresión siempre debe ser un valor conocido, ya sea entero, caracter o cadena de caracteres
  • puede haber tantos elementos caso como caminos diferentes necesitemos en nuestro algoritmo
  • el elemento otros contiene instrucciones que se ejecutarán sólo en caso de que la variable o expresión no resulte en ninguno de los valores propuestos para los distintos caminos y es un elemento opcional (aunque es recomendable que siempre esté presente)
Pero para entender mejor esta estructura, vayamos directamente a un ejemplo. El siguiente algoritmo sirve para mostrarle al usuario qué dia de la semana es en función del valor de una variable numérica llamada dia, que será proporcionada por el mismo usuario:

algoritmo Dia_Semana
var
   entero: dia
inicio
   escribir("Escribe un número entre 1 y 7: ")
   leer(dia)
   segun_sea (dia) hacer
      caso 1:
         escribir("LUNES")
      caso 2:
         escribir("MARTES")
      caso 3:
         escribir("MIÉRCOLES")
      caso 4:
         escribir("JUEVES")
      caso 5:
         escribir("VIERNES")
      caso 6:
         escribir("SÁBADO")
      caso 7:
         escribir("DOMINGO")
      otros:
         escribir("Error. El número debe estar entre 1 y 7.")
   fin_segun
fin

Como vemos en este ejemplo, el valor que el usuario proporcione determina lo que se escribe en pantalla. Por otro lado, si el usuario nos proporciona un número que no esté entre 1 y 7 (a pesar de que se le instruye a hacerlo), entonces se ejecuta la sentencia del elemento otros y se muestra al usuario un mensaje de error.

Veamos otro ejemplo. Ahora vamos a escribir un programa que arroje una calificación en letra según el promedio de tres calificaciones numéricas dadas por el usuario.

algoritmo Calificacion
var
   entero: cal1, cal2, cal3, promedio
inicio
   escribir("Proporciona las tres calificaciones del alumno: ")
   leer(cal1, cal2, cal3)
   promedio <- redondeo((cal1 + cal2 + cal3) / 3)
   segun_sea (promedio) hacer
      caso 10:
         escribir("A")
      caso 9:
         escribir("B")
      caso 8:
         escribir("C")
      caso 7:
         escribir("D")
      otros:
         escribir("F")
   fin_segun
fin

En este caso optamos por redondear el promedio para convertirlo en un número entero y poder hacer uso de la alternativa múltiple.

Veamos un último caso más completo, combinando varias de las estructuras que ya conocemos. El siguiente algoritmo se usa para determinar el descuento a aplicar a un cliente en una tienda de computadoras. La tienda reconoce 4 niveles de clientes y dos niveles de descuento para cada uno. Los tipos de clientes son "A", "B", "C" y "D", mientras que los montos de descuento se resumen en la siguiente tabla:


algoritmo Descuentos
var
   caracter: tipo_cliente
   entero: descuento
   real: monto_compra
inicio
   escribir("Proporciona el tipo de cliente: ")
   leer(tipo_cliente)
   escribir("Proporciona el monto de la compra: ")
   leer(monto_compra)
   segun_sea (tipo_cliente) hacer
      caso "A":
         si (monto_compra < 5000) entonces
            descuento = 0
         si_no
            descuento = 5
         fin_si
      caso "B":
         si (monto_compra < 5000) entonces
            descuento = 5
         si_no
            descuento = 7
         fin_si
      caso "C":
         si (monto_compra < 5000) entonces
            descuento = 7
         si_no
            descuento = 10
         fin_si
      caso "D":
         si (monto_compra < 5000) entonces
            descuento = 10
         si_no
            descuento = 15
         fin_si
   fin_segun
   escribir("El descuento aplicable al cliente es del " + descuento + "%")
fin

En este ejemplo hemos combinado dos estructuras de selección: la alternativa múltiple y la alternativa doble, haciendo a nuestro algoritmo muy potente y versátil. Este es un buen ejemplo de las estructuras de decisión anidadas o en cascada que estudiaremos en la próxima lección. 

Por ahora, ¡te toca practicar! ¡hasta la próxima!

ACTIVIDADES DE APRENDIZAJE

1. Escribe un programa que acepte dos números reales de un usuario y también un código de selección que representa la operación aritmética a ejecutar. Si el código es 1, se debe ejecutar y mostrar el resultado de la suma de ambos números. Si el código es 2, se debe restar el segundo número del primero y mostrar el resultado. Si el código es 3, se deben multiplicar los números y mostrar el resultado. Si el código es 4, el primer número debe dividirse entre el segundo y mostrar el resultado. Si el código es un número distinto a cualquiera de los especificados, se debe mostrar un mensaje de error.

2. Escribe un programa que permita calcular el área de distintas figuras geométricas, a elección del usuario. Primero, el usuario debe ver un menú de opciones para elegir la figura geométrica cuya área desea calcular. Las opciones son:
   A - Triángulo
   B - Rectánulo
   C - Cuadrado
   D - Círculo
   E - Polígono de n lados
Una vez que el usuario elige su figura, el algoritmo debe solicitar los datos necesarios para calcular el área de la figura elegida y mostrar el resultado correspondiente.






0 comentarios:

Publicar un comentario

Copyright © IsraelCapetillo.com - Un blog de tecnología, noticias geek y más Compartido por Gooyaabi Templates | Powered By Blogger

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com