Características de los algoritmos y resolución de problemas (A3C34A1D01)

Características de los algoritmos y resolución de problemas

Existen multitud de problemas que se pueden resolver mediante un ordenador, pero todos ellos tienen en común el que parten de unos datos de entrada y se procesan mediante una serie de instrucciones con el fin de proporcionar unos resultados; es decir, siguen el esquema que se muestra en la Figura 1. Los programas son líneas de código escritas por personas, llamadas programadores, en algún lenguaje de programación que entiende el ordenador y que resuelven un problema. Podría pensarse que para solucionar un problema basta con aprender un lenguaje de programación y sentarse directamente a escribir código. Sin embargo, eso sería equivalente a construir un coche sin antes haberlo diseñado o a rodar una película sin un guion previo. En el contexto de la programación, los algoritmos constituyen una de las herramientas básicas para el diseño de los programas.

Partes de un problema resoluble con un ordenador

Figura 1. Partes de un problema resoluble con un ordenador.

Un algoritmo es la descripción de la solución de un problema mediante la secuencia ordenada de pasos que lo resuelven. Se caracteriza por ser:

  • Preciso, es decir, no debe poseer ambigüedades para ser interpretado siempre de la misma manera.

  • Robusto, esto es, no debe contener errores.

  • Definido, respondiendo siempre de la misma manera ante las mimas circunstancias.

  • Ordenado, dejando claro cuál es la secuencia de instrucciones que hay que realizar.

  • Finito, lo que significa que acaba en algún momento.

  • Legible, es decir, comprensible para cualquier persona que lo lea.

Instrucciones para realizar un avión de papel

Figura 2. Instrucciones para realizar un avión de papel. (e.digitall.org.es/aviones-papel)

La Figura 2 ilustra un algoritmo para solucionar el problema consistente en la realización de un avión de papel. En este ejemplo, la entrada es la hoja de papel; la salida, el avión construido; y las instrucciones están representadas por las imágenes de la 1 a la 6. Observa que el algoritmo está descrito de forma gráfica y que cumple todas las propiedades: preciso, robusto, definido, ordenado, finito y legible.

En el contexto de la programación, los algoritmos se pueden escribir de muchas formas, aunque se suele usar el pseudocódigo por ser un lenguaje parecido al que utilizamos para comunicarnos, pero sin las ambigüedades e imprecisiones propias del lenguaje natural. Aprenderás todo sobre el pseudocódigo en otro tema posterior. Ahora lo más importante es que asimiles el proceso previo relacionado con la resolución de problemas. Porque para diseñar el algoritmo que describe la solución de un problema, antes es imprescindible analizar el problema de forma detallada, con el fin de identificar cada una de sus tres partes (Figura 1): datos de entrada, instrucciones para procesarlas y datos de salida. Para ello, puedes tratar de dar respuesta a las siguientes preguntas:

Pseudocódigo

Lo vas a entender enseguida con un ejemplo:

Imagina que te piden que escribas un programa que calcule el área de un círculo, de radio un número real positivo. Para abordarlo, debes responder a las preguntas anteriores:

  • ¿Qué quiero obtener? Un número que represente el área del círculo.

  • ¿Con qué datos cuento? Con el número que representa el radio.

  • ¿Qué instrumentos tengo? La operación producto la proporcionan todos los lenguajes de programación.

  • ¿Qué instrucciones hay que seguir y en qué orden? Veamos:

    P1. Llamamos radio, por ejemplo, al número que representa el radio del círculo.
    P2. Hay que obtener el valor del radio (supongamos que se le da el valor 2.
    P3. Llamamos PI, por ejemplo, al valor 3,14
    P4. Llamamos área, por ejemplo, al número que representa el resultado de la expresión PI*radio*radio (es decir, de 3,14*2*2).
    P5. Se proporciona como resultado el valor de área (el número 12,56).

Observa que no se puede mostrar el valor de área si aún no se ha calculado su valor; es decir, el paso P5 debe ir siempre después del paso P4. O no se puede hacer un producto de dos números si no se conoce el valor de uno de ellos; es decir, que el paso P4 debe ir siempre después del paso P2.

Atención

El orden de las instrucciones es tan importante como las propias instrucciones.

Sin embargo, el paso P3 puede ir antes o después del paso P1, y antes o después del paso P2. Además, el nombre de los números y las expresiones podría haber sido otro. Por ejemplo, al número que representa el radio se le podría haber puesto r, R, radius, X, o cualquier otro que nos guste. Lo mismo para el nombre del valor 3,14159 y para el valor de la expresión que calcula el área. Por tanto, se pueden crear distintos algoritmos igual de válidos que el que hemos escrito.

Atención

El algoritmo que describe la solución de un problema no tiene por qué ser único.

Para que te vayas familiarizando con el pseudocódigo, una posible descripción del algoritmo del ejemplo sería el siguiente:

Algoritmo AreaCirculo
Datos
radio, área, PI: Números
Instrucciones
Obtener el valor de radio
PI <- 3,14
área <- PI * radio * radio
Proporcionar el valor de área
Fin AreaCirculo

Finalmente, puedes comprobar que el ejemplo cumple todas las propiedades de los algoritmos: es preciso, robusto, definido, ordenado, finito y legible. Además, el algoritmo es correcto: hace lo que debe hacer. Por tanto, es el momento de traducirlo a un lenguaje de programación, lo que se conoce como implementación. La Figura 3 contiene varias implementaciones del algoritmo del ejemplo en Pascal, Python y Java. Verás que todas son muy parecidas al algoritmo en pseudocódigo y, además, entre ellas, diferenciándose únicamente en detalles específicos de sintaxis.

Posibles implementaciones del algoritmo del ejemplo en Pascal, Python y Java

Figura 3. Posibles implementaciones del algoritmo del ejemplo en Pascal, Python y Java.

En definitiva, una vez definido el algoritmo, la implementación es casi inmediata. Por tanto, para programar la solución de un problema, el proceso a seguir, de forma resumida, es el siguiente:

1 |  Análisis del problema
Para identificar los datos de entrada, los pasos a seguir para su procesamiento y la salida que debe proporcionar.

2 |  Diseño del algoritmo
Debe comprobarse que cumple todas las propiedades y que es correcto. Se escribirá en pseudocódigo.

3 |  Implementación
Traducción del algoritmo al lenguaje de programación elegido.