Estructuras no secuenciales


Los algoritmos que hemos escrito hasta ahora han consistido en una serie de sentencias que se ejecutan secuencialmente, una después de la otra (asignación, lectura y escritura). En programación es fundamental trabajar con algunas estructuras que modifican el flujo de control, con lo que tenemos la capacidad de tomar decisiones y definir el orden en el cual las sentencias de un programa son ejecutadas.

 

Estructuras de decisión o selección

Desde la perspectiva de programación, que se cumpla o no una condición se traduce en que una expresión lógica toma el valor VERDADERO (TRUE) o toma el valor FALSO (FALSE). En los casos más simples la condición suele ser una comparación entre dos datos, como, por ejemplo: si a < b hacer una cosa y en caso contrario hacer otra distinta. 

 

Estructura condicional simple: IF

Este es el tipo de estructura condicional elemental. Sirve para implementar acciones condicionales del tipo siguiente: Si se verifica una determinada condición, ejecutar una serie de instrucciones y luego seguir adelante. Si la condición NO se cumple, NO se ejecutan dichas instrucciones y se sigue secuencialmente.

En cualquiera de los casos, los “caminos” bifurcados se unen posteriormente en un punto, el flujo del programa recupera su característica de secuencialidad, y se continúa ejecutando por la instrucción siguiente a la estructura IF. 

 

Ejemplo

Dada la función 

Escriba el algoritmo que calcula el valor de la función.

 

Refinamiento

Acciones componentes

Entrada: leer datos

Escribir ( "Digite un número entero: " );

Leer (num);

 

Cálculos: Tomar decisión y calcular f si se requiere

Si (num > 0)

         f = num * num

 

Salida: imprimir resultado

Escribir( “f =”, f);

 

Variables necesarias: datos y resultado

int num, f

Inicializar el valor de f en 0, ya que es el valor por omisión

(b) Orden de ejecución

  1. Inicializar f 
  2. Leer num
  3. Tomar decisión y según resultado calcular f o continuar
  4. Imprimir el resultado

Estructura condicional doble: If - Else

Este tipo de estructura permite implementar condicionales en los que hay dos acciones alternativas:

 

  1. Si se cumple una determinada condición, entonces procede ejecutar un serie de instrucciones (Bloque verdadero).
  2. Si no, la condición NO se cumple, entonces ejecutar otra serie de instrucciones (bloque Falso).

 

En ambos casos, se sigue por la instrucción siguiente a la estructura IF - ELSE.

Ejemplo:

Escriba el algoritmo y el diagrama de flujo en pseudocódigo para encontrar la solución de la ecuación cuadrática de la forma:

La fórmula general para la solución de la ecuación está dada por:

Solución:

Pseudocódigo

Diagrama de flujo

Código C++

Ejemplo:

Escriba el algoritmo y el diagrama de flujo en pseudocódigo para ordenar tres números enteros diferentes en orden descendente y que han sido leídos desde teclado.

Solución:

Acciones componentes

Entrada: leer datos (Tres enteros diferentes)

 

Cálculos: Tomar decisiones y ordenar si se requiere

 

Salida: imprimir resultado

 

Variables necesarias:

Datos y resultado

int num1, num2, num3

(b) Orden de ejecución

Leer num1, num2, num3

Tomar decisión 

Imprimir el resultado

Diagrama de flujo

Código C++

Ejemplo:

Algoritmo de Zeller

La congruencia de Zeller es un algoritmo ideado por Julius Christian Johannes Zeller para calcular el día de la semana de cualquier fecha del calendario.

 

El algoritmo permite obtener a partir de una fecha dd/mm/aaaa, el día de la semana que le corresponde. Una implementación adecuada al cálculo computacional es la siguiente:

 

Funcion diaSemana(dd, mm, aaaa):

    n = int((14 - mm) / 12)

    y = aaaa - n

    m = int(mm + (12 * n) - 2)

    d = int(dd + y + int(y/4) - int(y/100) + int(y/400)+((31*m) / 12)) % 7

    return d

Fin_Funcion

 

Donde: DiaSemana{0, 1, 2,..., 6} = [Domingo, Lunes, Martes, ...,Sábado]

 

El siguiente es el código en Python para obtener el día de la semana correspondiente a una fecha cualquiera dada.

 

Código Python

Ejercicios

1.       Escriba el algoritmo y el diagrama de flujo tal que, dado un número entero, determine e imprima si el mismo es positivo, negativo o nulo.

2.       Modifique el algoritmo anterior para determinar si el número ingresado es par, impar o nulo.

3.       En una tienda harán una promoción en sus ventas para cada uno de sus clientes dependiendo del monto de la compra. Se requiere que usted escriba el algoritmo y diagrama de flujo correspondiente, según el siguiente criterio:

a.       Si el monto de la compra en inferior a $600 no aplica descuento.

b.       Si el monto está en el rango entre 600 y 1200 inclusive, aplica un 5%

c.        Si el monto está en el rango entre 1200 y 8000 inclusive, aplica un 15%

d.       Si el monto es superior a $8000 el descuento es de un 20%

El algoritmo debe imprimir el monto de la compra bruto, descuento a aplicar y monto a pagar.

4.       Diseñe un algoritmo que lea las notas obtenidas por un estudiante en 4 pruebas que están ponderadas así: Prueba 1: 15%, Prueba 2: 20%, Prueba 3: 30%, Prueba 4: 35%.  El algoritmo debe calcular la nota final definitiva entre 0.0 y 100.0. El algoritmo debe imprimir los valores ingresados, y un mensaje que indique si el estudiante “Ganó el curso” o “Perdió el curso”. Para el ejemplo, se gana el curso solo si la nota definitiva es mayor o igual a 70.

5.       Escriba un algoritmo para calcular el valor de la presión en libras por pulgada cuadrada (psi) de una onda descrita como sigue: Para tiempo, t, igual a o menor que 35 segundos, la presión es 0.46t psi y para tiempo mayor que 35 segundos la presión es 0.19t + 9.45 psi. El programa deberá solicitar el tiempo como entrada y deberá desplegar la presión como salida.

6.       Escriba un algoritmo que lee los datos de un empleado: Número de empleado, Número de horas trabajadas en la semana, Salario por hora, Porcentaje de cargas sociales. El algoritmo debe calcular el salario bruto y neto del empleado, si el número de horas laboradas en una semana es mayor a 48 entonces las horas que exceden ese valor se deben pagar con un 50% más sobre el valor de la hora ordinaria.

La salida debe consignar: Número de empleado, Horas ordinarias, Horas extraordinarias, Salario Bruto, Salario extraordinario, Deducciones y Salario Neto.