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