I1M2015: Programas interactivos y gráficas en Haskell

En la clase de hoy de Informática de 1º del Grado en Matemáticas se ha estudiado el tema 13 sobre programas interativos.

Se ha empezado observando un procedimiento que pide que se escriba una cadena y devuelve su longitud:

A continuación se han estudiado los elementos implicados en el procedimiento anterior: el tipo de las acciones de entrada/salida (IO), las acciones básicas (getChar, putChar y return), la secuenciación de acciones con do y la definición de algunos procedimientos del preludio (getLine, putStr, putStrLn, y sequence_).

Como aplicación se han estudiado dos programas:

  1. programa para adivinar un número en sus dos versiones: cuando la máquina tiene que adivinar el número pensado por el humano y cuando es el humano el que tiene que adivinar el número generado aleatoriamente por la máquina.
  2. el juego de la vida.

Finalmente se ha estudiado cómo representar gráficamente funciones con gnuplot. Concretamente se ha visto

  • cómo instalar gnuplot (tanto el programa como la librería de Haskell),
  • cómo importar la librería con `import Graphics.Gnuplot.Simple,
  • cómo dibujar gráfica de una función (con plotFunc),
  • como definir el rango de un gráfica (con linearScale),
  • cómo modificar los atributos de una gráfica (con EPS, Grid, Title, Key y XLabel),
  • cómo dibujar listas de puntos (con plotList),
  • cómo dibujar gráficas conjuntas de varias funciones (con plotFuncs),
  • cómo dibujar curvas paramétricas (con plotParamFunc) y
  • cómo dibujar superficies (con plotFunc3d).

La documentación de las funciones anteriores y otras funciones se encuentra en la página de la librería Graphics.Gnuplot.Simple.

I1M2015: Los problemas de las N reinas y de Hamming en Haskell

En la segunda parte de la clase de hoy de Informática de 1º del Grado en Matemáticas hemos vistos dos aplicaciones de la programación funcional en Haskell: el problema de las reinas (consistente en colocar N reinas en un tablero de dimensiones N por N de forma que no se encuentren más de una en la misma línea: horizontal, vertical o diagonal) y el problema de Hamming (consistente definir una sucesión estrictamente creciente de números tales que el número 1 está en la sucesión y que, si x está en la sucesión, entonces 2x, 3x y 5x también están).

El código del problema de las N reinas es
Read More “I1M2015: Los problemas de las N reinas y de Hamming en Haskell”

I1M2015: Problema del concurso “Cifras y letras” en Haskell

En la primera parte de la clase de hoy de Informática de 1º del Grado en Matemáticas hemos desarrollado un programa en Haskell para resolver los problemas aritméticos del concurso Cifras y letras que consisten en dada una sucesión de números naturales y un número objetivo, intentar construir una expresión cuyo valor es el objetivo combinando los números de la sucesión usando suma, resta, multiplicación, división y paréntesis. Además, cada número de la sucesión puede usarse como máximo una vez y todos los números, incluyendo los resultados intermedios tienen que ser enteros positivos (1,2,3,…).

Por ejemplo, dada la sucesión 1, 3, 7, 10, 25, 50 y el objetivo 765, una solución es (1+50)x(25−10). Para el problema anterior existen 780 soluciones. En cambio, con la sucesión anterior y el objetivo 831, no hay solución.

Se empieza formalizando el problema y definiendo una función para reconcer las soluciones. A continuación, se presentan tres soluciones: la primera por fuerza bruta, la segunda mediante generación y evaluación y la tercera con simplificaciones algebraicas. Se termina con una comparación de las tres soluciones.

El código del programa es
Read More “I1M2015: Problema del concurso “Cifras y letras” en Haskell”