I1M2011: Ejercicios de definiciones elementales en Haskell
En la clase de hoy de Informática de 1º del Grado en Matemáticas hemos comentado las soluciones a los ejercicios de la 1ª relación.
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 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 |
-- I1M 2011-12: Rel_1_sol.hs (11 de Octubre de 2011) -- Definiciones elementales de funciones. -- Departamento de Ciencias de la Computación e I.A. -- Universidad de Sevilla -- ===================================================================== -- --------------------------------------------------------------------- -- Introducción -- -- --------------------------------------------------------------------- -- En esta relación se plantean ejercicios con definiciones -- elementales (no recursivas) de funciones para ejercitar la -- introducción a Haskell presentada en el tema 2 y cuyas -- transparencias se encuentran en -- http://www.cs.us.es/~jalonso/cursos/i1m-11/temas/tema-2t.pdf -- Para solucionar los ejercicios puede ser útil el "Resumen de -- funciones de Haskell" que se encuentra en -- http://www.cs.us.es/~jalonso/cursos/i1m-11/doc/resumen_Haskell.pdf -- En concreto, se estudian funciones para calcular -- * la media de 3 números, -- * la suma de euros de una colección de monedas, -- * el volumen de la esfera, -- * el área de una corona circular, -- * la intercalación de pares, -- * la última cifra de un número, -- * la rotación de listas, -- * el rango de una lista, -- * el reconocimiento de palíndromos, -- * la igualdad y diferencia de 3 elementos, -- * la igualdad de 4 elementos, -- * el máximo de 3 elementos, -- * la división segura y -- * el área de un triángulo mediante la fórmula de Herón. -- --------------------------------------------------------------------- -- 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 intercala que reciba dos listas xs e -- ys de dos elementos cada una, y devuelva una lista de cuatro -- elementos, construida intercalando los elementos de xs e ys. Por -- ejemplo, -- intercala [1,4] [3,2] == [1,3,4,2] -- --------------------------------------------------------------------- intercala [x1,x2] [y1,y2] = [x1,y1,x2,y2] -- --------------------------------------------------------------------- -- Ejercicio 6. Definir la función ultimaCifra tal que (ultimaCifra x) -- es la última cifra del nímero x. Por ejemplo, -- ultimaCifra 325 == 5 -- --------------------------------------------------------------------- ultimaCifra x = rem x 10 -- --------------------------------------------------------------------- -- 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 tresIguales tal que -- (tresIguales x y z) se verifica si los elementos x, y y z son -- iguales. Por ejemplo, -- tresIguales 4 4 4 == True -- tresIguales 4 3 4 == False -- --------------------------------------------------------------------- tresIguales x y z = x == y && y == z -- --------------------------------------------------------------------- -- Ejercicio 12. Definir la función tresDiferentes tal que -- (tresDiferentes x y z) se verifica si los elementos x, y y z son -- distintos. Por ejemplo, -- tresDiferentes 3 5 2 == True -- tresDiferentes 3 5 3 == False -- --------------------------------------------------------------------- tresDiferentes x y z = x /= y && x /= z && y /= z -- --------------------------------------------------------------------- -- Ejercicio 13. Definir la función cuatroIguales tal que -- (cuatroIguales x y z u) se verifica si los elementos x, y, z y u son -- iguales. Por ejemplo, -- cuatroIguales 5 5 5 5 == True -- cuatroIguales 5 5 4 5 == False -- Indicación: Usar la función tresIguales. -- --------------------------------------------------------------------- cuatroIguales x y z u = x == y && tresIguales y z u -- --------------------------------------------------------------------- -- Ejercicio 14. 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 -- --------------------------------------------------------------------- maxTres x y z = max x (max y z) -- --------------------------------------------------------------------- -- Ejercicio 15. Definir la función divisionSegura tal que -- (divisionSegura x y) es x/y si y no es cero e y 9999 en caso -- contrario. Por ejemplo, -- divisionSegura 7 2 == 3.5 -- divisionSegura 7 0 == 9999.0 -- --------------------------------------------------------------------- divisionSegura _ 0 = 9999 divisionSegura x y = x/y -- --------------------------------------------------------------------- -- Ejercicio 16. En geometría, la fórmula de Herón, descubierta por -- Herón de Alejandría, dice que el área de un triángulo cuyo lados -- miden a, b y c es la raíz cuadrada de s(s-a)(s-b)(s-c) donde s es el -- semiperímetro -- s = (a+b+c)/2 -- Definir la función area tal que (area a b c) es el área de un -- triángulo de lados a, b y c. Por ejemplo, -- area 3 4 5 == 6.0 -- --------------------------------------------------------------------- area a b c = sqrt (s*(s-a)*(s-b)*(s-c)) where s = (a+b+c)/2 |