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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
-- --------------------------------------------------------------------- -- 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 |