Construyendo Algoritmos

Unidad de Apoyo para el Aprendizaje

Iniciar

Introducción


Cuando nos enfrentamos a un problema buscamos las opciones más adecuadas para solucionarlo; por medio del análisis podemos abstraer sus características y construir un algoritmo capaz de dar dicha solución, tomando en cuenta que un algoritmo es una serie de pasos bien definidos que ayudan a llegar a la solución de algún problema.

Es así como la búsqueda de esta solución no sólo es mediante el análisis, sino también diseñando e implementando; por eso la importancia de este tema, para identificar eficazmente todos los elementos posibles y así dar un resultado óptimo.

Si te interesa continuar con el tema, te invito a seguir estudiando.



Persona dentro de un diagrama de flujo


El estudio de este tema te permitirá:

Reconocer un algoritmo determinado para solucionar un problema, a través del estudio de sus elementos y características.

Algoritmo


Un algoritmo es un conjunto detallado y lógico de pasos para alcanzar un objetivo o resolver un problema; por ejemplo, el instructivo para armar un modelo de avión a escala; cualquier persona, si atiende de forma estricta la secuencia de los pasos, llegará al mismo resultado.

Niveles de abstracción para la construcción de algoritmos

La construcción de algoritmos se basa en la abstracción de las características del problema, a través de un proceso de análisis que permitirá seguir con el diseño de una solución fundamentada en modelos, los cuales ven su representación tangible en el proceso de implementación del algoritmo.

A continuación se definirán las siguientes fases que intervienen para la construcción de algoritmos:



Análisis

Consiste en reconocer cada una de las características del problema, lo cual se logra señalando los procesos y variables que lo rodean. Los procesos pueden identificarse como operaciones que se aplican a las variables del problema. Al analizar sus procesos o funciones, estos deben relacionarse con sus variables. El resultado esperado de esta fase de la construcción de un algoritmo es un modelo que represente la problemática encontrada y permita identificar sus características más relevantes.

Diseño

Una vez que se han analizado las causas del problema e identificado el punto exacto donde radica y sobre el cual se debe actuar para llegar a una solución, comienza el proceso de modelado de una solución factible, es decir, el diseño. En esta etapa se debe estudiar el modelo del problema, elaborar hipótesis acerca de posibles soluciones y comenzar a realizar pruebas.

Implementación

Por último, ya que se tiene modelada la solución, ésta debe implementarse usando el lenguaje de programación más adecuado.

Estructuras básicas en un algoritmo


En el modelado de soluciones mediante el uso de algoritmos es común encontrar ciertos comportamientos clásicos que tienen una representación a través de modelos ya definidos. A continuación se explican sus características.

Ciclos

Son estructuras que se caracterizan por iterar instrucciones en función de una condición que debe cumplirse en un momento bien definido. Existen dos tipos de ciclos, puntualizados en el siguiente cuadro.



Mientras Hasta que
Se caracteriza por realizar la verificación de la condición antes de ejecutar las instrucciones asociadas al ciclo. Evalúa la condición después de ejecutar las instrucciones una vez.
Las instrucciones definidas dentro de ambos ciclos deben modificar en algún punto la condición para que sea alcanzable; de otra manera, serían ciclos infinitos, un error de programación común.


En este tipo de ciclos el número de iteraciones que se realizarán es variable y depende del contexto de ejecución del algoritmo. Pulsa en cada concepto para desplegar la información correspondiente.



El ciclo mientras tiene el siguiente pseudocódigo:

mientras <condición> hacer
Instruccion1
Instruccion2
...
Instrucción n
fin mientras



El diagrama asociado a este tipo de ciclo es…



Máquina de Turing


Ejemplo del uso de la instrucción mientras:

•n = 0 (se inicializa el contador)
•suma = 0 (se inicializa la variable suma)
•mientras n = 5 hacer (condición)
•suma = suma + n
•n = n + 1
•fin mientras

El pseudocódigo asociado a la instrucción hasta que se define como sigue:

hacer
Instruccion1
Instruccion2
...
Instrucción n
Hasta que <condición>



Su diagrama se puede representar como…

Máquina de Turing


Ahora se utilizará el ejemplo anterior implementado con la función hasta que:

•n = 0 (se inicializa el contador)
•suma = 0 (se inicializa la variable suma)
•hacer
•suma = suma + n
•n = n + 1
•hasta que n = 5 (condición)



Cabe mencionar que las instrucciones contenidas en la estructura mientras se siguen ejecutando cuando la condición resulte verdadera. En cambio, hasta que continuará iterando siempre que la evaluación de la condición resulte falsa.

Cuando el pseudocódigo se transforma al código fuente de un lenguaje de programación se presenta el problema en la estructura, mientras no esté delimitada al final de ésta con un comando de algún lenguaje de programación, por lo que se tiene que cerrar con una llave, paréntesis o un End; en tanto la segunda estructura está acotada por un comando, tanto al inicio como al final.



Contadores


Este tipo de estructura también se caracteriza por iterar instrucciones en función de una condición que debe cumplirse en un momento conocido, y está representada por la instrucción para (for). En esta estructura se evalúa el valor de una variable a la que se asigna un valor conocido al inicio de las iteraciones; este valor sufre incrementos o decrementos en cada iteración y suspende la ejecución de las instrucciones asociadas una vez que se alcanza el valor esperado. En algunos lenguajes se puede definir el incremento que tendrá la variable; sin embargo, se recomienda que el incremento siempre sea con la unidad. Pseudocódigo que representa la estructura:


Para <variable> = <valor inicial> hasta <valor tope> [paso <incremento>] hacer
Instruccion1
Instruccion2
...
Instrucción n
Fin para <variable>



Se ha podido observar entre los símbolos [ ] la opción que existe para efectuar el incremento a la variable con un valor distinto de la unidad.

A continuación se muestra el diagrama asociado a esta estructura:

Ejemplo de esquema sobre la estructura conocida como contadores


Utilizaremos el ejemplo anterior implementado con la función for:

•suma = 0 (inicializamos la variable suma)
•para n = 0 hasta n = 5, [n + 1] hacer (indicamos que comenzaremos en n = 0 y repetiremos hasta que n alcance el valor de 5, con un incremento del valor de n en 1)
•suma = suma + n
•fin para n

Acumuladores


Los acumuladores son variables que tienen como propósito almacenar valores incrementales o decrementales a lo largo de la ejecución del algoritmo, y utilizan la asignación recursiva de valores para no perder su valor anterior. Su misión es arrastrar un valor que se va modificando con la aplicación de diversas operaciones y cuyos valores intermedios, así como el final, son importantes para el resultado global del algoritmo. Este tipo de variables generalmente almacena el valor de la solución arrojada por el algoritmo. La asignación recursiva de valor a este tipo de variables se ejemplifica a continuación:


<variable> = <variable> + <incremento>



En los ejemplos anteriores podemos observar el uso de los acumuladores en la variable n.

Condicionales


Esta clase de estructura se utiliza para ejecutar selectivamente secciones de código de acuerdo a una condición definida y sólo tiene dos opciones: si la condición se cumple, se ejecuta una sección de código; si no, se ejecuta otra sección, aunque esta parte puede omitirse.

Es importante mencionar que se pueden anidar tantas condiciones como lo permita el lenguaje de programación en el que se implemente el programa.

El pseudocódigo básico que representa la estructura if es el siguiente:


si <condición> entonces
Instruccion1
Instrucción n
[si no
Instrucción 3
Instrucción n]
Fin si



Dentro del bloque de instrucciones que se definen en las opciones de la estructura sí se pueden insertar otras estructuras condicionales anidadas. Entre los símbolos [ ] se encuentra la parte opcional de la estructura.

El diagrama asociado a esta estructura se muestra a continuación:



Ejemplo de esquema sobre la estructura conocida como condicionales


Ahora se empleará la estructura if para solucionar el mismo ejemplo que se ha estado manejando.

•suma = 0 (inicializamos la variable suma)
•n = 0 (inicializamos el acumulador)
•si n = 5 entonces (establecemos la condición)
•imprime suma
•de lo contrario (establecemos la alternativa de la condición)
•suma = suma + n
•n = n + 1
•fin si

En este caso, la condición se cumplirá hasta que n alcance el valor de 5; mientras no lo haga, realizará la suma de los valores hasta alcanzar la condición.

Rutinas recursivas


Son las que hacen llamadas a sí mismas en su definición, simplificando los valores originales de entrada. Se implementan en los casos en que el problema a resolver puede simplificarse en versiones más pequeñas del mismo problema, hasta llegar a casos simples de fácil resolución.

Las rutinas recursivas regularmente contienen una cláusula condicional (SI) que permite diferenciar entre el caso base, situación final en que se regresa un valor como resultado de la rutina, o bien, un caso intermedio, cuando se invoca la rutina a sí misma con valores simplificados.

Es importante no confundir una rutina recursiva con una cíclica; por ello se muestra a continuación el pseudocódigo genérico de una rutina recursiva:


<valor_retorno> Nombre_Funcion (<parámetroa> [,<parámetrob> ...])
si <caso_base> entonces
retorna <valor_retorno>
si no
Nombre_Funcion ( <parámetroa -1> [, <parámetrob -1> ...] )
Fin si



Como se observa en el ejemplo, en esta rutina es obligatoria la existencia de un valor de retorno, una estructura condicional y al menos un parámetro.

El diagrama asociado a este tipo de rutinas ya se ha ejemplificado en la figura de funciones recursivas.

En este tema se estudió un método por medio del cual se pueden construir algoritmos. Se revisaron las características de algunas estructuras básicas usadas típicamente en la implementación de estas soluciones, haciendo una abstracción de las características del problema.

Las estructuras básicas de un algoritmo están presentes en el modelado de soluciones. Es por ello que se abordaron estructuras como contadores, acumuladores, condicionales y rutinas recursivas.

Actividad. Creando soluciones

Para llegar a la solución de un problema es necesario identificar y crear algunos algoritmos que otorguen excelentes resultados a cualquier dificultad que se presente día con día. Es por esto que esta actividad te ayudará a reforzar los conceptos de análisis y diseño en la construcción de algoritmos.

Autoevaluación. La construcción de algoritmos

Es posible construir algoritmos para la solución de problemas, ya sean de carácter sencillo o complicado, identificando sus características para diseñarlos correctamente. En la siguiente autoevaluación podrás identificar tu nivel de comprensión del tema.

Fuentes de información

Básicas

Documentos electrónicos

SUAyED. (2016). Análisis, diseño e implantación de algoritmos. Apunte electrónico [Versión electrónica]. México: UNAM. Consultado el 21 de agosto de 2017 de http://fcasua.contad.unam.mx/apuntes/interiores/docs/20181/informatica/1/LI_1164_06097_A_Analisis_Diseno_Implantacion_Algoritmos_Plan2016.pdf

SUAyED. (2016). Análisis, diseño e implantación de algoritmos. Cuaderno de actividades [Versión electrónica]. México: UNAM. Consultado el 21 de agosto de 2017 de http://fcasua.contad.unam.mx/apuntes/interiores/docs/20181/informatica/1/LI_1164_06047_C_Analisis_Diseno_Implantacion_Algoritmos_Plan2016.pdf

Complementarias

Bibliografía

Cairó, O. (2006). Fundamentos de programación: piensa en C. México: Pearson Educación.

García, J. B. y Laza, R. (2008). Metodología y tecnología de la programación. Madrid: Pearson Prentice Hall.

Gelder, B. (2003). Algoritmos computacionales (3.ª ed.). México: Thompson.

Cómo citar

Texto correspondiente a esta sección.