Saltar la navegación

Módulo 2: Algoritmos y estructuras de control

Algoritmos y estructuras de control

un algoritmo está compuesto por una sucesión ordenada de comandos que se ejecutan uno detrás de otro. Sin embargo, con frecuencia es necesario recurrir a comandos especiales que alteran o controlan el orden en el que se ejecutan las acciones. Llamamos estructuras de control del flujo de las acciones al conjunto de reglas que permiten controlar el flujo de las acciones de un algoritmo o programa. Las mismas pueden clasificarse en secuenciales, condicionales e iterativas.

Estructuras de control secuenciales

Las estructuras secuenciales están compuestas por un número definido de acciones que se ubican en un orden específico y se suceden una tras otra. Los ejemplos que hemos discutido anteriormente están conformados por este tipo de estructura.

Estructuras de control condicionales

En algunas partes de un algoritmo puede ser útil detenerse a hacer una pregunta porque se llegó a una situación en la que puede haber una o más opciones disponibles para continuar. Dependiendo de la respuesta a la pregunta, que siempre deberá ser VERDADERO (TRUE) o FALSO (FALSE), el algoritmo seguirá ciertas acciones e ignorará otras. Estas preguntas y respuestas representan procesos de toma de decisión que conducen a diferentes caminos dentro del algoritmo, permitiéndonos que la solución para el problema en cuestión sea flexible y se adapte a distintas situaciones. Este tipo de estructuras de control de las acciones reciben el nombre de condicionales (o estructuras de selección) y pueden ser simples, dobles y múltiples.

      Estructuras condicionales simples

Postulan una evaluación lógica y, si su resultado es VERDADERO, se procede a ejecutar las acciones encerradas por esta estructura. Se     describen en pseudocódigo con la siguiente sintaxis:

            SI <condición> ENTONCES
                 Acción/es
            FIN SI

La palabra SI indica el comando de evaluación lógica, <condición> indica la condición a evaluar y Acción/es son las instrucciones que se realizarán sólo si se cumple la condición, es decir, si la evaluación resulta en VERDADERO. Si la condición no se verifica, no se ejecuta ninguna acción y el algoritmo sigue su estructura secuencial a continuación del FIN SI.

Por ejemplo, el siguiente algoritmo registra la edad de una persona y, en el caso de que sea mayor de edad, avisa que puede votar en las elecciones provinciales de Santa Fe:

      ALGORITMO: "Analizar edad para votar"
      COMENZAR
          VARIABLE numérica edad
          LEER edad
          SI edad >= 18 ENTONCES
                 ESCRIBIR "Edad = " edad " años: puede votar"
         FIN SI
     FIN

   Estructuras condicionales dobles

Este tipo de estructura añade una acción a ejecutarse en el caso de que la condición evaluada no se verifique (es decir, devuelve el valor FALSO). La sintaxis es:

           SI <condición> ENTONCES
                  Acción/es
           SI NO
                  Acción/es
           FIN SI

La palabra ENTONCES antecede a las acciones que se realizan si se cumple la condición y la expresión SI NO a las que se realizan si no se verifica la misma.

Retomando el ejemplo anterior:

Explicar
 
        ALGORITMO: "Analizar edad para votar"
             COMENZAR
                    VARIABLE numérica edad
                    LEER edad
                    SI edad >= 18 ENTONCES
                           ESCRIBIR "Edad = " edad " años: puede votar"
                    SI NO
                           ESCRIBIR "Edad = " edad " años: no puede votar"
                     FIN SI
             FIN

     Estructuras condicionales múltiples o anidadas

Permiten combinar varias estructuras condicionales para establecer controles más complejos sobre el flujo de las acciones, representando una toma de decisión múltiple. Podemos ejemplificar la sintaxis de la siguiente forma:

          SI <condición 1> ENTONCES
                Acción 1
          SI NO
                 SI <condición 2> ENTONCES
                       Acción 2
                 SI NO
                       Acción 3
                 FIN SI
           FIN SI

En la estructura anterior, hay una primera evaluación lógica en la cual si el resultado es VERDADERO, se ejecuta la Acción 1 y nada más. En cambio, si su resultado es FALSO, se procede a realizar una segunda evaluación lógica, que da lugar a la ejecución de la Acción 2 o de la Acción 3 si su resultado es VERDADERO o FALSO, respectivamente.

En el ejemplo de la edad:

      ALGORITMO: "Analizar edad para votar"
           COMENZAR
                  VARIABLE numérica edad
                  LEER edad
                  SI edad < 18 ENTONCES
                         ESCRIBIR "Edad = " edad " años: no puede votar"
                  SI NO
                         SI edad >= 70 ENTONCES
                                ESCRIBIR "Edad = " edad " años: puede votar opcionalmente"
                         SI NO
                                ESCRIBIR "Edad = " edad " años: debe votar obligatoriamente"
                         FIN SI
                  FIN SI
         FIN

Estructuras de control iterativas

Las estructuras de control iterativas son útiles cuando la solución de un problema requiere que se ejecute repetidamente un determinado conjunto de acciones. El número de veces que se debe repetir dicha secuencia de acciones puede ser fijo o puede variar dependiendo de algún dato o condición a evaluar en el algoritmo.

Estructuras de control iterativas con un número fijo de iteraciones

Se aplican cuando se conoce de antemano el número exacto de veces que se debe repetir una secuencia de acciones. También se conocen como bucles (loops) controlados por un conteo, ya que el algoritmo va contando la cantidad de repeticiones haciendo uso de una variable que recibe el nombre de variable de iteración, índice o conteo.

Por ejemplo, imaginemos que queremos escribir un algoritmo que permita calcular la quinta potencia de cualquier número. Para esto, se debe tomar dicho número y multiplicarlo por sí mismo 5 veces. Por lo tanto, una posible solución es:

         ALGORITMO: "Calcular la quinta potencia"
              COMENZAR
                    VARIABLE numérica x, resultado
                    LEER x
                    resultado <- 1
                    resultado <- resultado * x
                    resultado <- resultado * x
                    resultado <- resultado * x
                    resultado <- resultado * x
                    resultado <- resultado * x
                    ESCRIBIR x "elevado a la quinta es igual a" resultado
             FIN

Ya que sabemos que la multiplicación se debe repetir 5 veces, podemos resumir lo anterior con la siguiente estructura:

          ALGORITMO: "Calcular la quinta potencia"
              COMENZAR
                    VARIABLE numérica x, resultado
                    LEER x
                    resultado <- 1
                    PARA i DESDE 1 HASTA 5 HACER
                           resultado <- resultado * x
                    FIN PARA
                    ESCRIBIR x "elevado a la quinta es igual a" resultado
            FIN

La letra i es la variable de iteración. Podríamos haber elegido otra letra u otra palabra en su lugar, pero emplear i es una elección bastante común. En este ejemplo, su única función es ir contando la cantidad de veces que se repiten las acciones encerradas dentro de la estructura PARA/FIN PARA. El bloque de instrucciones se repite tantas veces como i tarde en llegar a 5 partiendo desde 1. Por convención, a la variable de iteración no la declaramos junto con las otras variables numéricas (como x y resultado).

Dado que la variable de iteración toma un valor numérico que va cambiando en cada repetición del bloque, se puede aprovechar para hacer cuentas con el mismo. Por ejemplo, el siguiente algoritmo muestra la tabla del ocho:

ALGORITMO: "Mostrar tabla del 8"
      COMENZAR
           VARIABLE numérica resultado
           PARA i DESDE 0 HASTA 10 HACER
                   resultado <- 8 * i
                   ESCRIBIR "8 x" i "=" resultado
            FIN PARA
       FIN

De manera general, la sintaxis para este tipo de estructuras es:

PARA <variable> DESDE <valor1> HASTA <valor2> CON PASO <valor3> HACER
          Acción/es
FIN PARA

Estructuras de control iterativas con un número indeterminado de iteraciones

En otras circunstancias se puede necesitar repetir un bloque de acciones sin conocer con exactitud cuántas veces, si no que esto depende de algún otro aspecto del algoritmo. Las iteraciones pueden continuar mientras que o hasta que se verifique alguna condición, dando lugar a dos tipos de estructuras. Estos casos también se conocen como bucles (loops) controlados por una condición.

  Mientras que

El conjunto de sentencias se repite mientras que se siga evaluando como VERDADERO una condición declarada al inicio del bloque. Cuando la condición ya no se cumple, el proceso deja de ejecutarse. La sintaxis es:

           MIENTRAS QUE <condición> HACER
                    Acción/es a repetir
            FIN MIENTRAS

Observaciones:

La evaluación de la condición se lleva a cabo antes de cada iteración, incluso antes de ejecutar el código dentro del bloque por primera vez. Si la condición es FALSO inicialmente, entonces las acciones en el cuerpo de la estructura no se ejecutan nunca.

La evaluación de la condición sólo se lleva a cabo al inicio de cada iteración. Si la condición se vuelve FALSO en algún punto durante la ejecución de un bloque, el programa no lo nota hasta que se termine de ejecutar el bloque y la condición sea evaluada antes de comenzar la próxima iteración.

Veamos un ejemplo:

ALGORITMO: "Dividir un número por 2 hasta encontrar un valor menor que 0.01"
      COMENZAR
            VARIABLE numérica x
            LEER x
            MIENTRAS QUE x >= 0.01 HACER
                     x <- x / 2
                     ESCRIBIR x
            FIN MIENTRAS
     FIN

   Hasta que

A diferencia de la estructura MIENTRAS QUE, la estructura HASTA QUE repite el bloque de acciones hasta que se cumpla una condición, es decir, se ejecuta mientras que dicha condición sea evaluada como FALSA. La sintaxis es:

        REPETIR
             Acción/es
         HASTA QUE <condición>

Observación: con la estructura MIENTRAS QUE podría ser que el conjunto de sentencias nunca llegue a ejecutarse si desde partida la condición evaluada ya es falsa. Por el contrario, en la estructura HASTA QUE el proceso se realiza al menos una vez, dado que la condición se evalúa al final.

El ejemplo anterior empleando este tipo de estructura:

ALGORITMO: "Dividir un número por 2 hasta encontrar un valor menor que 0.01"
      COMENZAR
            VARIABLE numérica x
            LEER x
            REPETIR
                x <- x / 2
                ESCRIBIR x
             HASTA QUE x < 0.01
     FIN

Creado con eXeLearning (Ventana nueva)