Fundamentos de Algoritmos: Estructuras y Representaciones
Algoritmo
Es un conjunto preescrito de instrucciones o reglas bien definidas, ordenadas y finitas que permite realizar una actividad mediante pasos sucesivos que no generen dudas a quien deba realizar dicha actividad. Dados un estado inicial y una entrada, siguiendo los pasos sucesivos se llega a un estado final y se obtiene una solución.
Medios de Expresión de un Algoritmo (Formas de Representación Algorítmica)
Los algoritmos pueden ser expresados de muchas maneras, incluyendo el lenguaje natural, pseudocódigo, diagramas de flujo y lenguajes de programación, entre otros. Las descripciones en lenguaje natural tienden a ser ambiguas y extensas. El uso de pseudocódigo y diagramas de flujo evita muchas ambigüedades del lenguaje natural. Dichas expresiones son formas más estructuradas para representar algoritmos; no obstante, se mantienen independientes de un lenguaje de programación específico.
La descripción de un algoritmo usualmente se hace en tres niveles:
- Descripción de alto nivel: Se establece el problema, se selecciona un modelo matemático y se explica el algoritmo de manera verbal, posiblemente con ilustraciones y omitiendo detalles.
- Descripción formal: Se usa pseudocódigo para describir la secuencia de pasos que encuentran la solución.
- Implementación: Se muestra el algoritmo expresado en un lenguaje de programación específico o algún objeto capaz de llevar a cabo instrucciones.
Diagrama de Flujo
Los diagramas de flujo son descripciones gráficas de algoritmos; usan símbolos conectados con flechas para indicar la secuencia de instrucciones y están regidos por ISO.
Los diagramas de flujo son usados para representar algoritmos pequeños, ya que abarcan mucho espacio y su construcción es laboriosa. Por su facilidad de lectura, son usados como introducción a los algoritmos, descripción de un lenguaje y descripción de procesos a personas ajenas a la computación.
Pseudocódigo
El pseudocódigo (falso lenguaje, el prefijo pseudo significa falso) es una descripción de alto nivel de un algoritmo que emplea una mezcla de lenguaje natural con algunas convenciones sintácticas propias de lenguajes de programación, como asignaciones, ciclos y condicionales, aunque no está regido por ningún estándar. Es utilizado para describir algoritmos en libros y publicaciones científicas, y como producto intermedio durante el desarrollo de un algoritmo, como los diagramas de flujo, aunque presentan una ventaja importante sobre estos, y es que los algoritmos descritos en pseudocódigo requieren menos espacio para representar instrucciones complejas.
Estructuras Algorítmicas
Estructura Secuencial
Es aquella en la que una acción (instrucción) sigue a otra en secuencia. Las tareas se suceden de tal modo que la salida de una es la entrada de la siguiente y así sucesivamente hasta el fin del proceso. La estructura secuencial tiene una entrada y una salida. Su representación gráfica es la siguiente:
Pseudocódigo de una Estructura Secuencial:
Inicio
acciones
Fin
Estructuras Condicionales
La especificación formal de algoritmos tiene realmente utilidad cuando el algoritmo requiere una descripción más complicada que una lista sencilla de instrucciones. Este es el caso cuando existen un número de posibles alternativas resultantes de la evaluación de una determinada condición.
Las estructuras selectivas se utilizan para tomar decisiones lógicas; de ahí que se suelan denominar también estructuras de decisión o alternativas.
En las estructuras selectivas se evalúa una condición y en función del resultado de la misma se realiza una opción u otra. Las condiciones se especifican usando expresiones lógicas. La representación de una estructura selectiva se hace con palabras en pseudocódigo (if, then, else o bien en español si, entonces, sino), con una figura geométrica en forma de rombo o bien con un triángulo en el interior de una caja rectangular.
Las estructuras selectivas o alternativas pueden ser:
- Simples
- Dobles
Alternativa Simple (SI-ENTONCES/IF-THEN)
La estructura alternativa simple si-entonces (en inglés if-then o bien IF-THEN) ejecuta una determinada acción cuando se cumple una determinada condición. La selección si-entonces evalúa la condición.
Si la condición es verdadera, entonces ejecuta la acción S1 (o acciones en caso de ser S1 una acción compuesta y constar de varias acciones).
Si la condición es falsa, entonces no hacer nada.
Pseudocódigo en Español
Si <condición> Entonces
Fin_si
Alternativa Doble (SI-ENTONCES-SI_NO / IF – THEN – ELSE)
La estructura anterior es muy limitada y normalmente se necesitará una estructura que permita elegir entre dos opciones o alternativas posibles, en función del cumplimiento o no de una determinada condición.
Si la condición C es verdadera, se ejecuta la acción S1 y, si es falsa, se ejecuta la acción S2.
Pseudocódigo en Español
Si <condición> entonces
<acción S1>
si_no
fin_si
Estructuras Repetitivas
Las estructuras que repiten una secuencia de instrucciones un número determinado de veces se denominan Bucles y se denomina Iteración al hecho de repetir la ejecución de una secuencia de acciones. Entre las estructuras repetitivas se encuentran:
- Mientras (while)
- Repetir (repeat)
- Desde (for)
Estructura Mientras (WHILE)
La estructura repetitiva while, es aquella en que el cuerpo del bucle se repite mientras se cumple una determinada condición.
Mientras condición hacer / while condición do
Acción S1 / <Acciones>
Acción S2
:
:
acción Sn / End_while
Fin_mientras
Ejemplo:
Contar los números enteros positivos introducidos por teclado. Se consideran dos variables enteras NUMERO y CONTADOR (contará el número de enteros positivos). Se supone que se leen números positivos y se detiene el bucle cuando se lee un número negativo o cero.
Inicio
contador = 0, numero;
Leer (numero);
Mientras (numero > 0) hacer
contador = contador + 1;
Leer (numero);
Fin_Mientras
Escribir(“El número de enteros positivos es: “, contador)
Fin
Estructura Para (FOR)
Esta estructura ejecuta las acciones del cuerpo del bucle un número especificado de veces, y de modo automático controla el número de iteraciones o pasos.
Pseudocódigo
Inicio
Desde i = 0 hasta i <= 100
{
Escribir i
}
Fin
Repetir… Hasta (DO – WHILE)
La estructura repetir cumple la misma función que la estructura mientras. La diferencia está en que la estructura mientras comprueba la condición al inicio y repetir lo hace al final. Es por ello la estructura repetir se ejecuta por lo menos una vez.
Pseudocódigo
Hacer
Acción_1;
Acción_2;
Acción_n;
Mientras {condición}