I1M2019: 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 13 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:
+ la comprobación con QuickCheck de equivalencia de soluciones 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 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
-- --------------------------------------------------------------------- -- 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 -- --------------------------------------------------------------------- -- Ejercicio 9. Definir la función rango tal que (rango xs) es la -- lista formada por el menor y mayor elemento de xs. -- rango [3,2,7,5] == [2,7] -- Indicación: Se pueden usar minimum y maximum. -- --------------------------------------------------------------------- rango xs = [minimum xs, maximum xs] -- --------------------------------------------------------------------- -- Ejercicio 10. Definir la función palindromo tal que (palindromo xs) se -- verifica si xs es un palíndromo; es decir, es lo mismo leer xs de -- izquierda a derecha que de derecha a izquierda. Por ejemplo, -- palindromo [3,2,5,2,3] == True -- palindromo [3,2,5,6,2,3] == False -- --------------------------------------------------------------------- palindromo xs = xs == reverse xs -- --------------------------------------------------------------------- -- Ejercicio 11. Definir la función interior tal que (interior xs) es la -- lista obtenida eliminando los extremos de la lista xs. Por ejemplo, -- interior [2,5,3,7,3] == [5,3,7] -- interior [2..7] == [3,4,5,6] -- --------------------------------------------------------------------- interior xs = tail (init xs) -- --------------------------------------------------------------------- -- Ejercicio 12. Definir la función finales tal que (finales n xs) es la -- lista formada por los n finales elementos de xs. Por ejemplo, -- finales 3 [2,5,4,7,9,6] == [7,9,6] -- --------------------------------------------------------------------- finales n xs = drop (length xs - n) xs -- --------------------------------------------------------------------- -- Ejercicio 13. Definir la función segmento tal que (segmento m n xs) es -- la lista de los elementos de xs comprendidos entre las posiciones m y -- n. Por ejemplo, -- segmento 3 4 [3,4,1,2,7,9,0] == [1,2] -- segmento 3 5 [3,4,1,2,7,9,0] == [1,2,7] -- segmento 5 3 [3,4,1,2,7,9,0] == [] -- --------------------------------------------------------------------- segmento m n xs = drop (m-1) (take n xs) |