1.4 Programación estructurada: Sentencia IF-THEN-ELSE  
Sesión Prevista para el 21 Noviembre 2008

 

1.4.1 Escribir un programa en Pascal que lea tres números reales y determine si los valores leídos pueden representar las longitudes de los lados de un triángulo (en un triángulo la suma de dos cualesquiera de sus lados debe ser mayor que el tercero). El programa informará si el triángulo es equilátero (los tres lados son iguales), isósceles (al menos dos lados son iguales) o escaleno (no tiene dos lados iguales).

La primera etapa para resolver este problema consiste en una fase de análisis (de las entradas, salidas y del objetivo de nuestro programa) que da como resultado un algortimo. En cualquier análisis se trata habitualmente de encontrar respuestas a una serie de preguntas:

¿Qué información recibirá mi programa (qué entradas)?. 3 valores reales que identificaremos como lado1, lado2 y lado3.

¿Qué información mostrará mi programa (qué salidas)?. El programa debe informar si los 3 valores representan o no los lados de un triángulo, si es o no un triángulo equilátero, si es o no un isósceles o si es o no un escaleno. Podemos representar entonces las salidas como los valores de cuatro variables lógicas (cuyo valor puede ser "cierto" -true- o "falso" -false- ) identificadas como Triangulo, Equilatero, Isosceles,Escaleno (observar que estos son identificadores de variables, se omiten los acentos apropósito).

 

Ya tenemos el análisis de entradas/salidas:

  • Entrada: lado1, lado2, lado3: números reales
  • Salida: Triangulo,Equilatero,Isosceles,Escaleno: valores lógicos (booleanos)

 

Y podemos enunciar el objetivo de nuestro programa a partir del análisis de entradas y salidas que acabamos de hacer:

  • Objetivo: Determinar si lado1, lado2 y lado3 representan o no las longitudes de los lados de un triángulo (si lo representan, la salida Triangulo toma el valor "Cierto", si no es así toma el valor "Falso") e informar si el triángulo es isósceles (la salida Isosceles toma el valor "Cierto"), equilátero (Equilatero es "Cierto") o escaleno (Escaleno es "Cierto").

Aun falta por analizar los aspectos esenciales de la solución a nuestro problema, lo que dará como resultado los pasos de nuestro algoritmo, a saber:

  • ¿Cómo determino que lado1, lado2 y lado3 son longitues de los lados de un triángulo? Para eso hay que leer la información que nos dan en el problema: "la suma de dos cualesquiera de sus lados debe ser mayor que el tercero" y encontrar una forma de representarla en el algoritmo considerando las entradas y salidas (variables) que hemos definido en el análisis (teniendo en mente que al final lo vamos a plasmar en un programa en Pascal); por ejemplo, así: lado1 + lado2 es mayor que lado3 Y lado1 + lado3 es mayor que lado2 Y lado2 + lado3 es mayor que lado1. Cuando esta condición sea cierta, entonces Triangulo (la variable) tomará el valor "Cierto".
  • ¿Como puedo determinar si el triángulo es equilátero?. De nuevo, la fuente es el enunciado del problema: "un triángulo con los tres lados iguales" y puede representarse así Triangulo es Cierto Y lado1 = lado2 = lado3. (Dos observaciones: (1) hay que considerar primero que los lados deben ser de un triángulo para que pueda determinarse que es equilátero.(2) La fórmula que se ha usado para comparar 3 variables no se corresponde exactamente con la sintaxis de Pascal, en el programa habrá que utilizar una expresión "ligeramente distinta" para representar la comparación de 3 variables).
  • ¿Como determinar si es isósceles?. "al menos dos lados iguales", por ejemplo así: Triangulo es CiertoY lado1 = lado2 O lado2 = lado3 O lado3 = lado1
  • ¿Cómo determinar si es escaleno?. "no tiene dos lados iguales" o lo que es lo mismo "los tres lados son distintos", por ejemplo así: Triangulo es Cierto Y lado1 <> lado2 <> lado3 (Observación: el operador "<>" es usado para representar la desigualdad en Pascal).

Finalmente:

  • Pasos del algoritmo:
    1. Leer los valores lado1, lado2, lado3
    2. Inicializar las salidas Triangulo, Equilatero, Isosceles, Escaleno a "Falso"
    3. SI (lado1 + lado2) es mayor que lado3 Y (lado1 + lado3) es mayor que lado2 Y (lado2 + lado3)es mayor que lado1
      ENTONCES Triangulo vale "Cierto"
    4. SI Triangulo es "Cierto"
      ENTONCES SI lado1 = lado2 = lado3

               ENTONCES Equilatero vale "Cierto"
    5. SI Triangulo es "Cierto"
      ENTONCES SI (lado1 = lado2) O (lado2 = lado3) O (lado3 = lado1
      )
                     ENTONCES Isosceles vale "Cierto"
    6. SI Triangulo es "Cierto"
      ENTONCES SI lado1 <> lado2 <> lado3
              
      ENTONCES Escaleno vale "Cierto"
    1. Escribir en pantalla:

    2. "Es triangulo: " Triangulo
      "Es equilátero: " Equilatero
      "Es isósceles: " Isosceles
      "Es escaleno: " Escaleno

(Nota: Este algoritmo no es único, seguramente estés pensando que se podría haber hecho más estructurado, aprovechando la sentencia SI_ENTONCES_SINO. Si lo consideras conveniente, trata de hacerlo utilizando esta sentencia).

Ejercicio Individual: Una vez realizado el análisis y elaborado el algoritmo, escribir el correspondiente programa en Pascal.

 

1.4.2 Las ecuaciones cuadráticas de la forma pueden terner una, dos o ninguna solución real. Si el discriminante es positivo, la ecuación tiene dos soluciones reales dadas por la fórmula

; si el discriminante es cero, la ecuación tiene una única solución real, -B/2A; y si es negativo no hay soluciones reales. Escribir un programa para comprobar si una ecuación cuadrática tiene raíces reales y, si es así, que encuentre y muestre en pantalla dichas raíces. Si no hay raíces reales, mostrar un mensaje apropiado. Ejecutar el programa con los siguientes valores para A, B y C: 1, 5, -6; 1, -2, 1; 1,0,4;1,1,1; 2,1,-3.

Seguir como guía para el análisis de entradas/salidas y diseño del algoritmo la resolución del problema anterior. Finalmente, escribir el programa en Pascal.

  • ¿Qué información recibirá mi programa (qué entradas)?
  • ¿Qué información mostrará mi programa (qué salidas)
  • ¿Cuál es el objetivo de mi programa, considerando las entradas y salidas?
  • Una vez formulado el objetivo, para encontrar los pasos del algoritmo (es decir, lo que tiene que hacer el programa) encuentra respuesta a las siguientes preguntas:
    • ¿Cómo determino si la ecuación tiene dos soluciones reales?¿Qué tiene que hacer el programa (qué calcula y qué muestra) en este caso?
    • ¿Cómo determino si la ecuación tiene una solución real? ¿Qué tiene que hacer el programa (qué calcula y qué muestra) en este caso?
    • ¿Cómo determino si la ecuación no tiene solución real? ¿Qué tiene que hacer el programa (qué calcula y qué muestra) en este caso?

Después de encotrar respuestas, elaborar el algoritmo y escribir el programa.