Menu Close

I1M2018: Ejercicios de definiciones por composición sobre números y listas (1)

En la clase de hoy del curso de Informática de 1º del Grado en Matemáticas hemos comentado soluciones de los 8 primeros ejercicios de la 1ª relación sobre definiciones por composición de funciones sobre números, listas y booleanos.

En el comentario de algunos ejercicios se ha indicado:

  • el uso creativo del fallo; es decir, cómo a partir de una definición incorrecta se puede obtener otra correcta y
  • la comparación de eficiencia de soluciones, activando las estadísticas con :set +s

Los ejercicios y su solución se muestran a continuación

-- ---------------------------------------------------------------------
-- Introducción                                                       --
-- ---------------------------------------------------------------------
 
-- En esta relación se plantean ejercicios con definiciones de funciones 
-- por composición sobre números, listas y booleanos.
-- 
-- Para solucionar los ejercicios puede ser útil el manual de
-- funciones de Haskell que se encuentra en http://bit.ly/1uJZiqi y su
-- resumen en http://bit.ly/ZwSMHO
 
-- ---------------------------------------------------------------------
-- Ejercicio 1. Definir la función media3 tal que (media3 x y z) es
-- la media aritmética de los números x, y y z. Por ejemplo, 
--    media3 1 3 8     ==  4.0
--    media3 (-1) 0 7  ==  2.0
--    media3 (-3) 0 3  ==  0.0
-- ---------------------------------------------------------------------
 
media3 x y z = (x+y+z)/3
 
-- ---------------------------------------------------------------------
-- Ejercicio 2. Definir la función sumaMonedas tal que 
-- (sumaMonedas a b c d e) es la suma de los euros correspondientes a 
-- a monedas de 1 euro, b de 2 euros, c de 5 euros, d 10 euros y
-- e de 20 euros. Por ejemplo,
--    sumaMonedas 0 0 0 0 1  ==  20
--    sumaMonedas 0 0 8 0 3  == 100
--    sumaMonedas 1 1 1 1 1  ==  38
-- ---------------------------------------------------------------------
 
sumaMonedas a b c d e = 1*a+2*b+5*c+10*d+20*e
 
-- ---------------------------------------------------------------------
-- Ejercicio 3. Definir la función volumenEsfera tal que 
-- (volumenEsfera r) es el volumen de la esfera de radio r. Por ejemplo,
--    volumenEsfera 10  ==  4188.790204786391
-- Indicación: Usar la constante pi.
-- ---------------------------------------------------------------------
 
volumenEsfera r = (4/3)*pi*r**3
 
-- ---------------------------------------------------------------------
-- Ejercicio 4. Definir la función areaDeCoronaCircular tal que 
-- (areaDeCoronaCircular r1 r2) es el área de una corona circular de
-- radio interior r1 y radio exterior r2. Por ejemplo,
--    areaDeCoronaCircular 1 2 == 9.42477796076938
--    areaDeCoronaCircular 2 5 == 65.97344572538566
--    areaDeCoronaCircular 3 5 == 50.26548245743669
-- ---------------------------------------------------------------------
 
areaDeCoronaCircular r1 r2 = pi*(r2**2 -r1**2) 
 
-- ---------------------------------------------------------------------
-- Ejercicio 5. Definir la función ultimaCifra tal que (ultimaCifra x)
-- es la última cifra del número x. Por ejemplo,
--    ultimaCifra 325  ==  5
-- Indicación: Usar la función rem
-- ---------------------------------------------------------------------
 
ultimaCifra x = rem x 10
 
-- ---------------------------------------------------------------------
-- Ejercicio 6. Definir la función maxTres tal que (maxTres x y z) es
-- el máximo de x, y y z. Por ejemplo,
--    maxTres 6 2 4  ==  6
--    maxTres 6 7 4  ==  7
--    maxTres 6 7 9  ==  9
-- Indicación: Usar la función max.
-- ---------------------------------------------------------------------
 
maxTres x y z = max x (max y z)
 
-- ---------------------------------------------------------------------
-- Ejercicio 7. Definir la función rota1 tal que (rota1 xs) es la lista
-- obtenida poniendo el primer elemento de xs al final de la lista. Por
-- ejemplo, 
--    rota1 [3,2,5,7]  ==  [2,5,7,3]
-- ---------------------------------------------------------------------
 
rota1 xs = tail xs ++ [head xs]
 
-- ---------------------------------------------------------------------
-- Ejercicio 8. Definir la función rota tal que (rota n xs) es la lista
-- obtenida poniendo los n primeros elementos de xs al final de la
-- lista. Por ejemplo, 
--    rota 1 [3,2,5,7]  ==  [2,5,7,3]
--    rota 2 [3,2,5,7]  ==  [5,7,3,2]
--    rota 3 [3,2,5,7]  ==  [7,3,2,5]
-- ---------------------------------------------------------------------
 
rota n xs = drop n xs ++ take n xs
I1M2018