martes, 7 de abril de 2015

Lógica de Programación (12): Alternativa doble si-entonces-si_no

En la lección anterior conocimos la primera de las estructuras de selección: la alternativa simple si-entonces. Sin embargo, a pesar de su utilidad, esa estructura resulta bastante limitada.

Si pensamos con detenimiento en cada uno de los ejemplos que hemos desarrollado hasta ahora usando decisiones, notaremos una molesta tendencia: si las condiciones no se cumplen, nuestro programa no hace absolutamente nada y muy seguramente eso causará una gran confusión en los usuarios. Lo ideal sería que, de no cumplirse las condiciones, nuestro programa ejecutara una acción distinta; tal vez algo tan simple como mostrar un mensaje al usuario haciéndole notar que las condiciones no se cumplieron. Es para ello que usamos la alternativa doble.

La alternativa doble es mucho más versátil
La alternativa doble, como su nombre bien lo indica, nos permite dividir el flujo de nuestro programa en dos caminos distintos. El camino que se tome dependerá de una condición o conjunto de condiciones. En cada uno de los caminos ejecutaremos una o más acciones. Al escribir un algoritmo, la representamos asi:

si (condicion) entonces
    acciones1
si_no
    acciones2
fin_si

En esta estructura, el conjunto de acciones1 se ejecutará si se cumple la condición, mientras que, si no se cumple, se ejecutará el conjunto de acciones2. Para ejemplificar el uso de esta estructura, pensemos en el ejercicio 3 de la lección anterior. En ese problema, debíamos calcular los resultados de una ecuación cuadrática sólo si se cumplía la condición de que el determinante (b**2 - 4*a*c) fuera mayor o igual que cero. Ahora, añadiremos un requisito más: si dicha condición no se cumple, avisaremos al usuario que la ecuación que nos proporcionó no tiene soluciones dentro de los números reales*. Algo asi:

algoritmo Ecuacion_segundo_grado
var
   real: a, b, c, x1, x2
inicio
   escribir("Proporciona el coeficiente a")
   leer(a)
   escribir("Proporciona el coeficiente b")
   leer(b)
   escribir("Proporciona el coeficiente c")
   leer(c)
   si (b**2 - 4*a*c >= 0) entonces
      x1 <- (-b + raiz2(cuadrado(b) - 4 * a * c)) / (2 * a)
      x2 <- (-b - raiz2(cuadrado(b) - 4 * a * c)) / (2 * a)
      escribir("Los resultados para la ecuación propuesta son: " x1 + " y " + x2)
   si_no
      escribir("La ecuación proporcionada no tiene solución en el campo de los números reales")
   fin_si
fin

La sección resaltada es la modificación que hemos hecho al programa. Podemos ver que ahora, si el determinante no es mayor o igual que cero, el usuario verá un mensaje indicándole que la ecuación no tiene solución. 

Esta misma lógica podemos aplicarla a los otros ejemplos que hemos realizado. Mira los cambios:

algoritmo Mayor_que_cero   //ejemplo 1 de la lección 11
var
   entero: num
inicio
   escribir("Por favor proporciona un número:")
   leer(num)
   si (num > 0) entonces
      escribir ("Yay! el número es mayor que cero!")
   si_no
      escribir("Ouch! el número no es mayor que cero! :( ")
   fin_si
fin


algoritmo Validar_Numero   //ejemplo 2 de la lección 11
var
   entero: num
inicio
   escribir("Por favor proporciona un número:")
   leer(num)
   si (num mod 2 = 1) or (num < 0) or (num > 100) entonces
      escribir("¡El número proporcionado no es válido!")
   si_no
      escribir("¡Tu número es válido!")
   fin_si
fin

algoritmo Mayor_de_edad   //ejercicio 1 de la lección 11
var
   entero: edad
inicio
   escribir("¿Cuantos años tienes? ")
   leer(edad)
   si (edad > 18) entonces
      escribir ("Ya puedes tramitar tu credencial para votar")
   si_no
      escribir("Todavía no puedes tramitar tu credencial para votar")
   fin_si
fin

algoritmo Sobrepeso   //ejercicio 2 de la lección 11
var
   real: peso, estatura, imc
inicio
   escribir("Proporciona tu peso en kilogramos: ")
   leer(peso)
   escribir("Proporciona tu estatura en metros: ")
   leer(estatura)
   imc <- peso / estatura ** 2
   escribir("Tu IMC es igual a " + imc)
   si (imc >= 25) entonces
      escribir("¡Tienes sobrepeso!")
   si_no
      escribir("¡Felicidades! ¡no tienes sobrepeso!")
   fin_si
fin


Observa que la alternativa doble es mucho más beneficiosa puesto que le da más versatilidad a nuestros programas, además de proporcionar una mejor experiencia de uso a nuestros usuarios.

En la próxima lección conoceremos una estructura aún más versátil: la alternativa múltiple. Pero por ahora veamos qué tanto has aprendido. Intenta resolver los siguientes problemas para practicar la alternativa doble. Recuerda que si tienes preguntas, siempre puedes dejarlas en los comentarios o a través de la sección de contacto de este blog. ¡Hasta la próxima!


ACTIVIDADES DE APRENDIZAJE

1. Escribe un programa que reciba como dato la medida de un ángulo en grados y determine si es el ángulo es recto o no.

2. Se requiere un programa que calcule el monto a pagar por un cliente que hace una compra en una tienda de zapatos. Si la compra del cliente supera los 1000 pesos, se le aplicará un descuento del 5%. En caso contrario, no se aplica ningún descuento. Supón que todos los pares de zapatos cuestan lo mismo.

3. Escribe un programa que determine si un número dado es par o no.

4. Escribe un programa que determine si un número dado tiene parte fraccionaria o no. Tip: puedes usar la función trunc, que conocimos en la lección 8.

5. Diseña un algoritmo que permita calcular el área de un triángulo en base a las medidas de sus tres lados. La fórmula para dicho cálculo es la siguiente:



donde a, b y c son las medidas de los tres lados y p equivale a la mitad de la suma de los tres lados. Considera que para que esta fórmula pueda utilizarse, el valor de p debe ser mayor que cada uno de los lados.


PROBLEMA RETO

Un año normal tiene 365 días. Los años bisiestos tienen 366 días. Escribe un programa que determine si un determinado año es bisiesto o no. Las condiciones para saber si un año es bisiesto son:
  • Los años bisiestos son los divisibles entre 4 (como 2004, 2008, etc.)
  • excepto si es divisible entre 100, entonces no es bisiesto (como 2100, 2200, etc.)
  • excepto si es divisible entre 400, entonces sí (como 2000, 2400)

Dicho de otro modo, son bisiestos todos los años divisibles por 4, excluyendo los que sean divisibles por 100, pero no los que sean divisibles por 400.





*Técnicamente, las ecuaciones de segundo grado siempre tienen solución, aunque no sean dentro del conjunto de los números reales. Cuando esto sucede, se dice que la ecuación tiene soluciones imaginarias. Sí, los números imaginarios "existen". Pero no ahondaremos en esas complejidades ahora.


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