Palabras clave: Resolución de problemas, Algoritmo, Programa, Intérprete, Compilador, Processing, Instrucciones.

1. Resolver Problemas

Un problema es una situación no deseada en un contexto determinado. Resolver un problema es llevar a cabo una secuencia de acciones, las que correspondan, para cambiar la situación inicial a una situación final que se considere “aceptable”.

Si la secuencia de acciones finaliza con una situación aceptable se dice que dicha secuencia es una solución del problema.
Ejemplo 1. ¿Cómo se llena un cubo?

Si te dan un cubo vacío y quieres llenarlo de agua utilizando un grifo como el de la figura, la acción de enganchar el asa del cubo en el grifo cambiará el escenario y si a continuación abres el grifo lo volverás a modificar. Llegará un momento en el que el cubo estará lleno y tendrás un estado o escenario “aceptable”: habrás conseguido tu objetivo.

Llena cubo

Sin duda hay situaciones más “aceptables” que otras. Las mejores son las llamadas "soluciones óptimas", y en cada contexto se deberá de interpretar qué debe entenderse por óptimo.

Ejemplo 2. LLenar un cubo de forma eficiente

En el ejemplo de llenar el cubo de agua, una solución óptima en recursos podría ser finalizar con el grifo cerrado o considerar que es suficiente con llenar tan sólo la mitad cubo pues de este modo optimizados la cantidad de agua consumida.

Sin embargo, si la optimización se basa en transportar la mayor cantidad de agua posible será prioritario llenar el cubo hasta el borde (independientemente de cerrar o no el grifo).

En informática la resolución de problemas pasa por el proceso básico del análisis del problema, consistente en determinar los siguientes aspectos:

  1. Definir el problema con total precisión. NO debes tener duda alguna de lo que debes de hacer.

  2. Determinar qué datos te dan del problema.

  3. Buscar qué relación hay entre los datos para extraer información relevante.

  4. Establecer qué información es la que debes proporcionar como salida.

  5. Determinar qué datos/información es la que te falta y qué necesitas para obtenerla. Puede que tengas que poner a prueba tus dotes de investigación para la búsqueda de ideas, marcos teóricos o consultar a expertos (por ejemplo, a tus profesores).

La definición y análisis del problema deberá ayudarte a generar varias soluciones. Entonces deberás de estudiar las ventajas e inconvenientes de cada una de esas soluciones de acuerdo a tus objetivos y restricciones para decidir cuál de ellas es "la mejor", la "más aceptable". La solución elegida será la que deberás llevar a cabo.

Ejemplo 3. Análisis de un problema

Ante el problema de obtener el área de un círculo, en su análisis tenemos:

  1. La definición del problema está clara: "obtener el área de un círculo".

  2. Para ello necesitamos usar fórmulas conocidas que calculen el área de un círculo.

  3. Según la fórmula a utilizar los datos de entrada necesarios son diferentes.

  4. De entre todas las fórmulas, consideraremos que "la mejor" es la fórmula \(S=\pi \times r^2\).

  5. Para la fórmula seleccionada, el dato de entrada necesario es el valor del radio (\(r\)) del círculo.

  6. Según lo anterior, los 5 aspectos del análisis del problema son:

    1. La definición exacta del problema es "calcular el área del círculo de radio \(r\)".

    2. Para esta definición, los datos de entrada se reducen al radio (\(r\)).

    3. Los datos de salida se reducen a uno solo: la superficie (\(S\)).

    4. La relación entre ambos datos es la expresión \(S=\pi \times r^2\).

    5. No se necesitan más datos pues el valor de \(\pi\) es bien conocido: 3.1415

Indica los 5 aspectos indicados para el problema de encontrar las soluciones de las ecuaciones \((x-2)(x+4)=0\) y \((x-a)(x+b)=0\).

A veces, te encontrarás el siguiente icono. Púlsalo cuando hayas resuelto el ejercicio.

Observa que este ejercicio pone también de manifiesto algo que ocurre en muchas ocasiones: a veces es conveniente resolver un problema más general a un problema dado. Resolver el problema general resolverá no solo tu problema inicial, sino que también resolverá todos aquellos problemas "del mismo tipo" (aquellos que son casos particulares del más general).

Cuanto más generalices las soluciones más problemas serás capaz de resolver.

2. Algoritmos

En informática, una solución al problema se consigue con la obtención de un algoritmo y se considera que un algoritmo es mejor (o más óptimo) cuanto menos tiempo tarde en resolver el problema y menos memoria de ordenador necesite para realizar los cálculos.

En general, no existe ningún consenso definitivo en cuanto a la definición formal de algoritmo. Una de tales definiciones es la siguiente:

Un algoritmo es un conjunto 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.

— Wikipedia

Los algoritmos son el objeto de estudio de la algoritmia.

Como ejemplo te muestro cómo se puede expresar como algoritmo la suma de dos números naturales.

Ejemplo 4. Algoritmo para sumar dos números
  1. Colocar los números el primero encima del segundo, de tal manera que las unidades, decenas, centenas, etc., de los números queden alineadas. Trazar una línea debajo del segundo número.

  2. Empezar por la columna más a la derecha.

  3. Sumar los dígitos de dicha columna.

  4. Si la suma es mayor a 9 anotar un 1 encima de la siguiente columna a la izquierda y anotar debajo de la línea las unidades de la suma. Si no es mayor anotar la suma debajo de la línea.

  5. Si hay más columnas a la izquierda, pasar a la siguiente columna a la izquierda y volver a 3.

  6. El número debajo de la línea es la solución.

El algoritmo se ha expresado en lenguaje natural, lo que hace que la solución sea fácil de entender para los hispanos hablantes pero de muy difícil comprensión para aquellos que no hablen nuestro idioma. Lo normal es expresar los algoritmos en lenguajes que todo el mundo los entiendan. Lo normal es expresar los algoritmo en pseudocódigo.

Un pseudocódigo (o falso lenguaje) permite describir los algoritmos de manera que todos los programadores puedan entenderlo. No obstante, cada pseudocódigo tiene su propio vocabulario que deberá ser sencillo y estar claramente descrito.

Nosotros no utilizaremos pseudocódigos para expresar los algoritmos, pero sí se te pedirá que los expreses en lenguaje natural mediante acciones imperativas y que te atengas a las siguientes consideraciones:

  • Usar el infinitivo para las acciones: calcular, dividir, andar, mostrar, …​ Por ejemplo:

    • sumar dos números.

    • mostrar un mensaje.

    • etc …​

  • Usar los condicionales si-entonces. Por ejemplo:

    • si es no nulo entonces calcular el valor inverso.

    • si el motor no arranca entonces abrir el capó.

    • etc …​

  • Usar la expresión mientras-hacer para expresar tareas repetitivas. Por ejemplo:

    • mientras que haya pintura hacer pintar la pared.

    • mientras que el número no sea el 8 hacer multiplicar por dos y pasar al siguiente número.

    • etc …​

  • Usar variables. Las variables guardan valores, al igual que cuando asignas un valor a una variable matemática. Una vez guardado un valor, puedes recuperarlo para operar con él en cualquier momento.

    • Una manera de indicar que "guardas" un valor es mediante el infinitivo Almacenar. Por ejemplo, "almacenar el valor 10 en x" guarda el valor 10 en x. Aunque se suele utilizar una expresión mucho más corta y más familiar: x=10.

    • Para recuperar el valor, basta mencionar a la variable. Por ejemplo, si dices "Calcular 2+x+y" tendrás que recuperar los valore x e y para sustituir sus valores en la expresión.

Ejemplo 5. Un algoritmo para hacer ejercicio físico
  1. Guardar en la variable pasos el valor del número de acciones que vamos a realizar; por ejemplo, el valor 100 (pasos=100).

  2. Repetir, mientras que pasos no valga cero, las siguientes acciones:

    1. Si pasos es par y múltiplo de 10, entonces hacer una carrera rápida.

    2. Si pasos es par y no es múltiplo de 10, entonces saltar.

    3. Si pasos es impar, entonces flexionar.

    4. Decrementar el valor de pasos en una unidad.

  3. Respirar profundamente y descansar durante 5 minutos.

Escribe el algoritmo correspondiente a restar a un número otro número inferior, ambos con decimales. Utiliza el lenguaje natural y las recomendaciones indicadas.

3. Programas

Un programa es el resultado de expresar un algoritmo en un lenguaje de programación.

Un lenguaje de programación es un lenguaje diseñado por programadores para expresar las acciones de los pasos de un algoritmo en instrucciones del lenguaje. Las instrucciones de un lenguaje son las acciones que sí pueden ser realizadas por un ordenador. Cada lenguaje dispone de su propio conjunto de instrucciones.

Un programa recoge en un lenguaje específico las acciones que permiten resolver un problema en un ordenador. Dicho lengueje es entendible solo por los progromadores, no por los ordenadores.

Ejemplo 6. De los algoritmos a los programas

Tortuga

Logo es un lenguaje de programación que ordena a un criatura robótica a moverse por el suelo o a un objeto gráfico moverse en el monitor, que usualmente se representa por una tortuga, y que en ambos casos va dejando una "rastro" por los lugares por los que pasa.

Imagina que queremos programar en Logo y ordenar a la tortuga que dibuje un cuadrado de "50 pasos". Es decir, queremos que haga lo siguiente:

Tortuga

Una forma de expresarlo como un algoritmo es la siguiente:

Repetir 4 veces la secuencia
    Avanzar 50 pasos
    Girar 90 grados

Observa que el algoritmo indica lo que queremos hacer pero expresado en un lenguaje natural.

Si queremos expresar el algoritmo en el lenguaje Logo deberemos traducir cada una de sus líneas en órdenes a la tortuga; pero ¿cuáles son dichas órdenes? De entre su conjunto de instrucciones encontramos estas:

  • repeat n [], que repite n veces lo que se indique entre [].

  • forward n, que avanza n pasos

  • right n, que gira n grados

Con ello, la traducción del algoritmo al lenguaje Logo queda como:

repeat 4 [
   forward 50
   right 90
]

Con lo que la tortuga hará la siguiente secuencia de pasos:

Tortuga

En este ejemplo hemos conseguido traducir cada una de las acciones del algoritmo en una instrucción u orden en Logo. Como veremos en temas sucesivos esta tarea no siempre es tan fácil.

4. Interpretes vs Compiladores

Los programas se escriben en editores de texto y su contenido, que recibe el nombre de código fuente, debe traducirse en instrucciones entendibles por el ordenador (llamado lenguaje máquina).

  • Algunos lenguajes, llamados lenguajes interpretados, sólo necesitan el código fuente, el cuál van leyendo línea a línea y las traducen (o interpretan) a instruciones del lenguaje máquina y por tanto a acciones que puede realizar el ordenador.

  • Otros lenguajes, llamados compiladores, no entienden el código fuente por lo que éste debe traducirse a lenguaje máquina generando un "fichero intermedio" que recibe el nombre de código objeto. En el caso de que se generen varios códigos objeto será necesario usar un enlazador (linker) que se encargará de juntar todos los códigos objeto para generar un programa final ejecutable.

Existe multitud de lenguajes de programación. El índice TIBOE indica cuáles son los lenguajes más utilizados cada año.

5. Processing

Processing será el lenguaje de programación que usaremos durante el curso. Processing es un lenguaje de programación y entorno de desarrollo integrado de código abierto basado en el lenguaje de programación Java. Se caracteriza porque es de fácil utilización, y porque sirve como medio para la enseñanza y producción de proyectos multimedia e interactivos de diseño digital. Se distribuye bajo la licencia GNU GPL. Será el lenguaje de programación que se utilizará en esta guía.

La página oficial se encuentra en la URL https://processing.org/ donde podrás descargar la versión acorde al sistema operativo que utilices. Descomprime el fichero descargado y ejecuta el programa. Es así de fácil: ¡No requiere de instalación alguna!

La “pinta'' que tiene Processing es la que se muestra en la siguiente imagen. Lo que se muestra se llama PDE (Processing Development Environment). Es una aplicación que facilita la programación con Processing. En la imagen se indican las distintas componentes del PDE (versión 2.x), componenentes que se irán explicando en breve.

IDE de Processing

Memoriza el nombre de cada una de las partes que componen el PDE.

6. Instrucciones en Processing

Una instrucción es una orden que se le da al ordenador utilizando un determinado lenguaje.

En Processing existen muchas instrucciones que iremos aprendiendo poco a poco. Sus instrucciones se clasifican según el siguiente esquema, que tendrás que memorizar:

TIPOS DE INSTRUCCIONES
  • Instrucción simple

    Una instrucción simple es aquella que finaliza en punto y coma y puede ser:

    • una expresión con operadores,

    • una llamada a una función,

    • una declaración de variable o

    • una instrucción compuesta por varias instrucciones simples.

  • Instrucción condicional

    Una instrucción condicional o de selección es aquella que establece qué instrucciones deben de ejecutarse o no, en función del valor de una condición. Puede ser:

    • de condición simple,

    • bicondicional o

    • de condición múltiple.

  • Instrucción iterativa

    Una instrucción iterativa es aquella que repite una y otra vez un listado de instrucciones mientras que se cumpla una determinada condición.

Como iremos viendo en los sucesivos temas existe una relación directa en cómo se debe de expresar un algoritmo y el tipo de instrucciones:

Lo que en un algoritmo es …​ En un programa de Processing es …​

Acciones en infinitivo

Instrucciones simples

Expresión si-entonces

Instrucciones condicionales

Expresión mientras-hacer

Instrucciones iterativas

Es por ello que tu objetivo fundamental para saber programar sera obtener un algoritmo-solución para un problema dado. Así es, la programación es un proceso posterior a la construcción del algoritmo, la programación es la traducción del algoritmo a un lenguaje de programación …​. por tanto, si construyes un algoritmo tendrás un programa.

No hay programas sin algoritmos: la resolución del problema siempre se hace antes que cualquier programación. El lenguaje de programación suele ser un aspecto secundario.

Recuerda
  • Es más importante saber escribir algoritmos que escribir programas.

  • Antes de escribir cualquier programa, resuelve el problema con bolígrafo y papel.

  • Nunca empieces a resolver un problema escribiendo directamente en un lenguaje de programación. Es una muy mala práctica.

El conjunto de instrucciones que constituye un programa se deben de suministrar al ordenador de alguna forma. Sirva de analogía un editor de textos. De la misma forma que escribimos documentos electrónicos con un editor de textos, un programa se escribe en un editor de programas específico para el lenguaje de programación. Nosotros usaremos el editor del PDE - mira de nuevo la captura de imagen.

Observa la analogía.

  • En un editor de textos escribimos un documento descomponiéndolo en párrafos, estos en oraciones que pueden ocupar una o varias líneas, y las líneas a su vez constan de palabras.

  • En un editor de programas, un programa lo descompondremos en estructuras de control y éstas en líneas, llamadas líneas del programa, que a su vez estarán formadas por una o varias instrucciones.

Editor de Textos Editor de Programas

Párrafos

Estructuras de control

Líneas de texto

Líneas de código

Palabras

Instrucciones

Cuando un ordenador realiza una instrucción se dice que la instrucción se ha ejecutado, si se ejecutan las instrucciones de una línea se dice que la línea se ha ejecutado, si se ejecutan las líneas de una estructura se dice que la estructura se ha ejecutado y si se ejecutan todas las líneas del programa se dice que el programa se ha ejecutado.

7. Repasa y memoriza

  • Resolver un problema con ordenador consta de dos partes:

    1. Saber resolver el problema; es decir, saber encontrar una solución.

      • Será esencial llevar a cabo un buen análisis del problema.

    2. Expresar la solución en forma de algoritmo.

      • Se deberán de utilizar verbos en infinitivo, las expresiones si-entonces y mientas-hacer, y variables para guardar y recuperar valores.

  • Un algoritmo consta de una serie de pasos finitos que se ejecutan sin ambigüedad posible.

  • Un programa está formado por un conjunto de instrucciones que se escriben en un editor y por líneas.

  • Existen tres tipos de instrucciones: simples, condicionales e iterativas.

  • Las instrucciones del lenguaje de programación reciben el nombre de código fuente.

  • Existen lenguajes que interpretan directamente el código fuente a código máquina pero otros deben compilar el código fuente para obtener el código objeto.

  • En Processing existen tres tipos de estructuras: instrucciones simples, condicionales e iterativas.

  • Como un algoritmo resuelve un problema, es mucho más importante saber construir algoritmos que traducirlos a un programa.