Saltar la navegación

Enunciar un Algoritmo

Se debe plantear el método de resolución elegido mediante una construcción matemática denominada algoritmo.

Un aspecto importante a tener en cuenta en el enunciado de un algoritmo es como se administrarán los datos definidos en el problema. Siempre que un evento (un acontecimiento, una verificación, una medición, etc.) se pueda registrar de alguna forma, este evento se considerará como computable. Al registro de un evento en un sistema informático se lo denomina dato. Podemos diferenciar en un algoritmo dos tipos de datos, las constantes y los datos variables. Analicemos un ejemplo:

Si queremos hacer un simple algoritmo para calcular el perímetro de una circunferencia lo podríamos definir en los siguientes pasos:

  1. Establecer como dato de entrada el radio de la circunferencia.
  2. Establecer como fórmula de resolución: circunferencia = 2 x PI x radio
  3. Establecer como dato de salida la circunferencia calculada.

    En este caso tenemos dos datos perfectamente definidos: radio   circunferencia, ambos son datos variables  ya que no  podemos saber de ninguna forma el valor exacto del radio, pues este valor va a depender de un evento que el usuario determinó, luego la circunferencia (que depende del valor del radio) tampoco puede ser conocida de antemano. Por eso en el cálculo a los datos se los incorpora en forma referencial a través de un nombre simbólico.

    Por otra parte en la fórmula observamos dos datos que se requieren para el cálculo, el valor 2 y el valor PI (3,1415926...) ambos valores están perfectamente definidos y no es posible que cambien ya que entonces el resultado obtenido sería incorrecto. Ambos valores son entonces constantes y se incorporan literalmente en el cálculo.

    Además para enunciar este algoritmo se utilizará una herramienta de representación llamada diagrama o bien mediante un pseudocódigo. Veamos esto por partes:

    Algoritmo

    Un algoritmo (del griego y latín, dixit algorithmus y este a su vez en honor del matemático persa Al-Juarismi ) se define como un método aplicable con el fin de obtener la solución a un problema genérico. Debe presentarse como una secuencia ordenada de pasos que siempre se ejecutan en tiempo finito y con una cantidad de esfuerzo también finito o al menos que pueda detectar cuando el método se hace inviable e informarlo. Los algoritmos tienen un inicio y un final, son únicos y deben ser fácilmente identificables.

    Para su mejor claridad y aprovechamiento en la etapa de codificación, es conveniente que los algoritmos tengan ciertas características:

    • Debe tener un único comienzo y un sólo final perfectamente definidos.
    • Debe ser secuencial, cada paso se debe ejecutar en una forma ordenada y no debe comenzar a ejecutarse un paso sin haber concluido de ejecutar el paso Cuando se hace el diagrama del algoritmo, a esta secuencialidad se la denomina flujo de proceso.
    • Deben ser Finitos, con lo cual se entiende que deben finalizar en algún momento determinado.
    • Deben ser Eficientes, entendiéndose por esto que ocupen la cantidad mínima y necesaria de variables para que al codificar genere un programa que utilice la mínima cantidad de memoria y además minimizar el tiempo de ejecución evitando procesos redundantes o innecesarios.
    • Deben ser Legibles, se busca que el texto que lo describe debe ser claro, de forma que permita entenderlo y leerlo fácilmente, eligiendo nombres de variables y de procesos que hagan referencia clara a su  función dentro del código.
    • Deben ser Modificables, o sea que deben enunciarse de modo que sus posteriores modificaciones u ampliaciones sean fáciles de realizar, incluso por programadores diferentes a sus propios autores.
    • Deben ser Modulares, la filosofía utilizada para su diseño debe favorecer la división del problema en módulos pequeños. haciendo que procesos y cálculos complejos se descompongan en cálculos más complejos se descompongan en cálculos más simples.

    Si bien esto puede sonar contrario al enunciado sobre la eficiencia, lo óptimo sería poder llegar a un compromiso entre simplicidad y eficiencia.

    Ejemplo de un algoritmo

    Características de un Algoritmo computacional

    Para poder enunciar un algoritmo que se pueda codificar en un lenguaje de programación, debemos asumir que quién interpretará el algoritmo (la CPU) podrá realizar solamente acciones muy básicas. Si bien en los lenguajes de programación nos encontramos en que podemos utilizar multitud de acciones predefinidas, la mayoría están asociadas al contexto de ejecución o dicho de otro modo, la mayoría de acciones que se pueden realizar mediante un lenguaje de programación son de “forma” y no de “fondo” en cuanto a la resolución esencial de un problema.

    Digamos que nos concentraremos solamente en aquellas acciones que son comunes a cualquier lenguaje de programación y no contemplaremos ninguna acción que sea exclusiva de un lenguaje. Así podemos determinar que las acciones que serán permitidas en un algoritmo son las siguientes:

    • Introducir un valor en una variable desde un dispositivo de entrada (el teclado por ejemplo)
    • Mostrar en un dispositivo de salida un valor ya sea de una variable o un valor literal ( en la pantalla, por ejemplo)
    • Almacenar un valor en una variable como resultado de una expresión (como se denomina una cálculo en el lenguaje de la programación)
    • Bifurcar el flujo de ejecución entre dos alternativas, mediante una condición evaluada.
    • Repetir parte del flujo normal de proceso de una manera condicional.
    • Iterar, o sea repetir parte del flujo un número determinado de veces.
    • Seleccionar un único flujo de proceso a ejecutar de un conjunto de flujos posibles.

      Diagrama

      Según la Wikipedia, un diagrama es una representación gráfica de una proposición, de la resolución de un problema, de las relaciones entre las diferentes partes o elementos de un conjunto o sistema, o de la regularidad en la variación de un fenómeno que permite establecer algún tipo de ley.

      Existen muchísimos tipos de diagramas cada uno es aplicable de acuerdo a la información que se quiera representar, así por ejemplo en teoría de conjuntos tenemos los diagramas de Venn, en bases de datos se utilizan los diagramas de Entidad-Relación. En nuestro caso, la programación, se utilizan principalmente dos tipos de diagramas, los diagramas de Flujo de Datos y los de Nassi- Shneiderman, estos últimos los dejaremos fuera de nuestro análisis por ahora y nos concentraremos exclusivamente en los diagramas de flujo.

      DFD - Diagramas de Flujo de Datos

      Si bien los diagramas de flujo se utilizaban mucho tiempo antes de que la informática se volviera una realidad, es gracias a Herman Goldstine y John von Neumann la aplicación de estos diagramas a la planificación de algoritmos computacionales. Precisamente por su aplicación a la informática y su estandarización, en la actualidad los diagramas de flujo se utilizan en muchos campos del conocimiento fuera de la programación, por ejemplo, en el ámbito empresarial, en medicina, etc.

      En los diagramas de flujo de datos (abreviado DFD), el flujo precisamente está indicado por una línea descendente que indica la secuencia de ejecución de las instrucciones.

      En la ilustración 3 podemos observar todos los elementos del diagrama de flujo que maneja el programa PseInt. En el siguiente capítulo iremos analizando con ejemplos la funcionalidad de cada elemento del diagrama.

      Pseudocódigo

      El Pseudocódigo es otra forma de representar un algoritmo, en este caso utilizando una notación similar a un lenguaje de programación estándar, pero cuyas palabras claves están escritas en el lenguaje castellano. Existe una correspondencia entre los elementos del DFD y el Pseudocódigo como se puede apreciar en la ilustración 3.

      La idea es que se pueda ver el programa desde el punto de vista del programador el cual está acostumbrado a leer código fuente.

Creado con eXeLearning (Ventana nueva)