Introducción

El desarrollo de programas computacionales a partir de la identificación del problema, exige el cumplimiento formal de una serie de etapas que incrementalmente contribuyen a su solución.

Con la revisión del contenido de la unidad, se espera desarrollar en el lector la capacidad de clasificar los problemas y proponer soluciones óptimas dentro del marco metodológico de la construcción de algoritmos, y optimizar su solución a partir de la correcta elección y aplicación de las estructuras de control.

Finalmente desarrollar la capacidad para hacer pruebas de escritorio que permiten comprobar y afinar el algoritmo desarrollado para ser traducido en un lenguaje de programación de alto nivel a partir del pseudocódigo creado.

Objetivos

Objetivo general

Utilizar procesos metodológicos para el análisis y diseño de algoritmos, y aplicar diferentes estructuras que optimicen su solución y su evaluación.


Objetivos específicos

  • Conocer las técnicas básicas para el análisis, diseño y construcción de algoritmos.
  • Aplicar estructuras de control para la optimización de acciones repetitivas en la solución de un problema en un medio computacional.
  • Evaluar la solución de un problema haciendo uso de las pruebas de escritorio.

Algoritmos y sus características

Un algoritmo es un conjunto limitado de pasos que se deben expresar de manera clara y sin ambigüedad, que de acuerdo a un grupo de condiciones iniciales produce unos resultados en un tiempo limitado, que debe tener unas características fundamentales para su construcción y que en esencia se compone de tres elementos: datos, instrucciones o sentencias, y estructuras de control.

Una de las razones por las que se hace uso de éstos algoritmos es la capacidad para desarrollar de manera sistémica y rigurosa la metodología para la solución de un problema, que posteriormente se puede codificar en un programa y ser llevada para ser ejecutada por un computador a través de un lenguaje de programación: Java, C++, Delphi, etc.

La palabra algoritmo tiene su origen en el nombre del matemático Mohamed ibn Musa al Khwarizmi. Su apellido fue traducido al latín como algorismus, y posteriormente paso al español como algoritmo.

Los algoritmos son independientes tanto del lenguaje de programación en el cual se expresa como del computador en el cual se ejecuta. Esto quiere decir que en un problema el algoritmo se puede expresar en un lenguaje de programación diferente y ejecutarse en computadores diferentes, y el algoritmo siempre será el mismo.

Lenguajes algorítmicos

El algoritmo consiste en realizar una descripción paso a paso en un lenguaje natural del problema planteado siguiendo unas reglas básicas de composición que permiten posteriormente ser llevadas a un lenguaje algorítmico; su utilización y ventaja de aplicación radica en que ésta representación permite comprender la solución sistémica del problema antes de ser codificada en el lenguaje de programación.

Para la elaboración de algoritmos, existen diferentes lenguajes que permiten su implementación, ya sea de manera gráfica o numérica:

  • Pseudocódigo: lenguaje de especificación de algoritmos que se utiliza como paso previo a la codificación final en un lenguaje de programación. Mezcla el lenguaje de programación con el natural empleado dentro de la programación estructurada para realizar el diseño de un programa.
  • Diagrama de flujo: utiliza diversos símbolos (cajas) para representar cada una de las etapas de la solución de un problema, unidos por flechas que indican la secuencia en que se deben ejecutar (líneas de flujo).

    Los símbolos utilizados, han sido normalizados por el Instituto Norteamericano de Normalización – ANSI.

  • Diagrama Nassi-Schneiderman (N-S): a diferencia del diagrama de flujo, se omiten las flechas de unión y las cajas son contiguas. Las acciones que son sucesivas se escriben en cajas sucesivas y como en los diagramas de flujo, se pueden escribir diferentes acciones en una caja1.
  • Fórmulas: la representación de la solución de un problema en éste lenguaje tiene relevancia en ciertas soluciones algorítmicas debido a que no siempre la solución de un problema se puede representar con una simple fórmula.
  • Lenguaje natural: en un problema en el que se requiere la suma de dos números enteros, se puede observar la solución a través de los diferentes lenguajes algorítmicos y su implementación en el programa PSeInt.

1 Joyanes Aguilar, L. (1996). Fundamentos de programación, algoritmos y estructura de datos. Editorial McGrawHill. México.

Metodología de desarrollo de algoritmos

La resolución de un problema haciendo uso del computador, es una tarea que exige al programador, tener en cuenta una serie de fases claramente definidas. Estas son:

Estructuras secuenciales

Un programa estructurado de manera secuencial es aquel en el que una acción (instrucción) es seguida inmediatamente de otra para su ejecución de tal manera que la salida de una se convierte en la entrada de otra y así sucesivamente hasta finalizar el proceso:


1 Inicio

2 <Acción 1>

3 <Acción 2>

4 <Acción 3>

5 ….

6 <Acción n>

7 Fin

Estructuras de decisión

Las estructuras selectivas o de decisión son utilizadas para tomar decisiones lógicas en el caso que exista un número de posibles alternativas resultantes de una condición. En estas se evalúa la condición, y en función del resultado, se ejecuta una opción u otra.

Las estructuras de decisión pueden ser:

  • Simples (Si – entonces/if - then): evalúa una condición dada y dependiendo del resultado (verdadero o falso) determina la acción a seguir.
  • Dobles (Si – entonces – si_no/if – then - else): permite ejecutar acciones en las dos alternativas posibles (verdadero o falso) una vez evaluada la condición.
  • Múltiples (Según sea, caso de/case): permite seleccionar una opción entre múltiples alternativas, lo que evita problemas de escritura del algoritmo y naturalmente de legibilidad.

Estructuras repetitivas

Algoritmos creados para repetir una o varias acciones un número finito de veces.

Las estructuras que repiten una sentencia de instrucciones un número determinado de veces se denominan bucles y se llama iteracción al hecho de repetir la ejecución de una sentencia de acciones1.

Se consideran 3 tipos de estructuras repetitivas:


1 Joyanes A. L. (2000). Programación en algoritmos, estructuras de datos y objetos. McGraw Hill. México.

Anidación de estructuras

Las estructuras anidadas son aquellas que pueden contener otras estructuras (de decisión y repetitivas) cualquier número de veces, ejecutando diferentes acciones:

  • De decisión: las estructuras de selección si-entonces y si-entonces-si_no implican la selección de dos alternativas. Con una estructura de decisión anidada, es posible utilizar la instrucción simple o doble para diseñar estructuras de selección que contengan más de dos alternativas. Por ejemplo, una estructura si-entonces puede contener otra estructura si-entonces y esta estructura si-entonces puede contener otra y así sucesivamente1.

Como el pseudocódigo se puede volver complejo en la medida que se agreguen más estructuras de decisión anidadas, se hace necesario aplicar indentación (o sangría) de tal manera que corresponda la palabra si y fin_si de cada estructura tal como lo ilustran las líneas.

  • Repetitivas: las estructuras repetitivas son anidadas igual que las estructuras de decisión, conservando las reglas de indentación. La estructura interna debe estar contenida completamente en la externa evitando el solapamiento.

1 Joyanes A. L. (2000). Programación en algoritmos, estructuras de datos y objetos. McGraw Hill. México.

Prueba de escritorio

Es un tipo de prueba que se utiliza para determinar si un algoritmo creado cumple con los requerimientos para el cual fue diseñado.

Esta prueba se realiza a mano (con lápiz y papel), tomando cada sentencia del algoritmo y registrando los valores que se le van asignando a cada una de las variables que lo componen.

Para realizar la prueba primero se hace un recorrido del algoritmo desde el inicio hasta el final para registrar las variables involucradas. Luego se vuelve al inicio y se evalúa cada sentencia registrando los valores en las variables que se revisaron en el primer paso. Así se continúa hasta el final del algoritmo.

Resumen

Para poder llegar a la solución de problemas haciendo uso del computador, es necesario comprender las técnicas, métodos y metodologías que faciliten el desarrollo de los algoritmos como un paso previo a la codificación del programa en cualquiera que sea el lenguaje de programación.

Los temas revisados comprenden la definición y características de los algoritmos, los diferentes lenguajes algorítmicos, las etapas en la metodología fundamental para el desarrollo de algoritmos, la descripción, el desarrollo y la aplicación de las diferentes estructuras que pueden estar presentes en la construcción de algoritmos, la anidación de estructuras y el proceso de hacer pruebas lógicas de los algoritmos antes de ser llevados a un lenguaje de programación, a través de la prueba de escritorio.

Bibliografía ()

  • Aguilar, L. (1996) Fundamentos de programación, segunda edición. España: Editorial McGrawHill.
  • Becerra Santamaria, C. (1998) Algoritmos: conceptos básicos, cuarta edición. Bogotá: Kimpres Ltda.
  • Deitel, H. (2003) Cómo programar en C++, cuarta edición. México: Pearson Education. Joyanes.
  • Joyanes Aguilar, L. (2000) Programación en algoritmos, estructuras de datos y objetos. Madrid: McGraw Hill.
  • Pimiento Cárdenas, W. (2009) Fundamentos de lógica para programación de computadores. Bogotá: Editorial Universidad Piloto de Colombia.