{"id":1622,"date":"2011-10-18T13:17:51","date_gmt":"2011-10-18T13:17:51","guid":{"rendered":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/?p=1622"},"modified":"2011-10-18T13:19:23","modified_gmt":"2011-10-18T13:19:23","slug":"i1m2011-ejercicios-de-definiciones-elementales-en-haskell","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/i1m2011-ejercicios-de-definiciones-elementales-en-haskell\/","title":{"rendered":"I1M2011: Ejercicios de definiciones elementales en Haskell"},"content":{"rendered":"<p>En la clase de hoy de <a href=\"http:\/\/www.cs.us.es\/~jalonso\/cursos\/i1m-11\">Inform\u00e1tica de 1\u00ba del Grado en Matem\u00e1ticas<\/a> hemos comentado las soluciones a los ejercicios de la <a href=\"https:\/\/www.glc.us.es\/~jalonso\/ejerciciosI1M2011G1\/images\/8\/82\/Rel_1.hs\">1\u00aa relaci\u00f3n<\/a>.<\/p>\n<p>Los ejercicios y su soluci\u00f3n se muestran a continuaci\u00f3n<br \/>\n<!--more--><\/p>\n<pre lang=\"haskell\">\r\n-- I1M 2011-12: Rel_1_sol.hs (11 de Octubre de 2011)\r\n-- Definiciones elementales de funciones.\r\n-- Departamento de Ciencias de la Computaci\u00f3n e I.A.\r\n-- Universidad de Sevilla\r\n-- =====================================================================\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Introducci\u00f3n                                                       --\r\n-- ---------------------------------------------------------------------\r\n\r\n-- En esta relaci\u00f3n se plantean ejercicios con definiciones\r\n-- elementales (no recursivas) de funciones para ejercitar la\r\n-- introducci\u00f3n a Haskell presentada en el tema 2 y cuyas\r\n-- transparencias se encuentran en     \r\n--    http:\/\/www.cs.us.es\/~jalonso\/cursos\/i1m-11\/temas\/tema-2t.pdf\r\n-- Para solucionar los ejercicios puede ser \u00fatil el \"Resumen de\r\n-- funciones de Haskell\" que se encuentra en\r\n--    http:\/\/www.cs.us.es\/~jalonso\/cursos\/i1m-11\/doc\/resumen_Haskell.pdf\r\n-- En concreto, se estudian funciones para calcular \r\n-- * la media de 3 n\u00fameros, \r\n-- * la suma de euros de una colecci\u00f3n de monedas, \r\n-- * el volumen de la esfera, \r\n-- * el \u00e1rea de una corona circular, \r\n-- * la intercalaci\u00f3n de pares,\r\n-- * la \u00faltima cifra de un n\u00famero,\r\n-- * la rotaci\u00f3n de listas, \r\n-- * el rango de una lista,\r\n-- * el reconocimiento de pal\u00edndromos, \r\n-- * la igualdad y diferencia de 3 elementos,\r\n-- * la igualdad de 4 elementos, \r\n-- * el m\u00e1ximo de 3 elementos, \r\n-- * la divisi\u00f3n segura y \r\n-- * el \u00e1rea de un tri\u00e1ngulo mediante la f\u00f3rmula de Her\u00f3n.\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 1. Definir la funci\u00f3n media3 tal que (media3 x y z) es\r\n-- la media aritm\u00e9tica de los n\u00fameros x, y y z. Por ejemplo, \r\n--    media3 1 3 8     ==  4.0\r\n--    media3 (-1) 0 7  ==  2.0\r\n--    media3 (-3) 0 3  ==  0.0\r\n-- ---------------------------------------------------------------------\r\n\r\nmedia3 x y z = (x+y+z)\/3\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 2. Definir la funci\u00f3n sumaMonedas tal que \r\n-- (sumaMonedas a b c d e) es la suma de los euros correspondientes a \r\n-- a monedas de 1 euro, b de 2 euros, c de 5 euros, d 10 euros y\r\n-- e de 20 euros. Por ejemplo,\r\n--    sumaMonedas 0 0 0 0 1  ==  20\r\n--    sumaMonedas 0 0 8 0 3  == 100\r\n--    sumaMonedas 1 1 1 1 1  ==  38\r\n-- ---------------------------------------------------------------------\r\n\r\nsumaMonedas a b c d e = 1*a+2*b+5*c+10*d+20*e\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 3. Definir la funci\u00f3n volumenEsfera tal que \r\n-- (volumenEsfera r) es el volumen de la esfera de radio r. Por ejemplo,\r\n--    volumenEsfera 10  ==  4188.790204786391\r\n-- Indicaci\u00f3n: Usar la constante pi.\r\n-- ---------------------------------------------------------------------\r\n\r\nvolumenEsfera r = (4\/3)*pi*r^3\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 4. Definir la funci\u00f3n areaDeCoronaCircular tal que \r\n-- (areaDeCoronaCircular r1 r2) es el \u00e1rea de una corona circular de\r\n-- radio interior r1 y radio exterior r2. Por ejemplo,\r\n--    areaDeCoronaCircular 1 2 == 9.42477796076938\r\n--    areaDeCoronaCircular 2 5 == 65.97344572538566\r\n--    areaDeCoronaCircular 3 5 == 50.26548245743669\r\n-- ---------------------------------------------------------------------\r\n\r\nareaDeCoronaCircular r1 r2 = pi*(r2^2 -r1^2) \r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 5. Definir la funci\u00f3n intercala que reciba dos listas xs e \r\n-- ys de dos elementos cada una, y devuelva una lista de cuatro \r\n-- elementos, construida intercalando los elementos de xs e ys. Por\r\n-- ejemplo,\r\n--    intercala [1,4] [3,2]  ==  [1,3,4,2]\r\n-- ---------------------------------------------------------------------\r\n\r\nintercala [x1,x2] [y1,y2] = [x1,y1,x2,y2]\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 6. Definir la funci\u00f3n ultimaCifra tal que (ultimaCifra x)\r\n-- es la \u00faltima cifra del n\u00edmero x. Por ejemplo,\r\n--    ultimaCifra 325  ==  5\r\n-- ---------------------------------------------------------------------\r\n\r\nultimaCifra x = rem x 10\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 7. Definir la funci\u00f3n rota1 tal que (rota1 xs) es la lista\r\n-- obtenida poniendo el primer elemento de xs al final de la lista. Por\r\n-- ejemplo, \r\n--    rota1 [3,2,5,7]  ==  [2,5,7,3]\r\n-- ---------------------------------------------------------------------\r\n\r\nrota1 xs = tail xs ++ [head xs]\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 8. Definir la funci\u00f3n rota tal que (rota n xs) es la lista\r\n-- obtenida poniendo los n primeros elementos de xs al final de la\r\n-- lista. Por ejemplo, \r\n--    rota 1 [3,2,5,7]  ==  [2,5,7,3]\r\n--    rota 2 [3,2,5,7]  ==  [5,7,3,2]\r\n--    rota 3 [3,2,5,7]  ==  [7,3,2,5]\r\n-- ---------------------------------------------------------------------\r\n\r\nrota n xs = drop n xs ++ take n xs \r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 9. Definir la funci\u00f3n rango tal que (rango xs) es la\r\n-- lista formada por el menor y mayor elemento de xs.\r\n--    rango [3,2,7,5]  ==  [2,7]\r\n-- Indicaci\u00f3n: Se pueden usar minimum y maximum.\r\n-- ---------------------------------------------------------------------\r\n\r\nrango xs = [minimum xs, maximum xs]\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 10. Definir la funci\u00f3n palindromo tal que (palindromo xs) se\r\n-- verifica si xs es un pal\u00edndromo; es decir, es lo mismo leer xs de\r\n-- izquierda a derecha que de derecha a izquierda. Por ejemplo,\r\n--    palindromo [3,2,5,2,3]    ==  True\r\n--    palindromo [3,2,5,6,2,3]  ==  False\r\n-- ---------------------------------------------------------------------\r\n\r\npalindromo xs = xs == reverse xs\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 11. Definir la funci\u00f3n tresIguales tal que \r\n-- (tresIguales x y z) se verifica si los elementos x, y y z son\r\n-- iguales. Por ejemplo, \r\n--    tresIguales 4 4 4  ==  True\r\n--    tresIguales 4 3 4  ==  False\r\n-- ---------------------------------------------------------------------\r\n\r\ntresIguales x y z = x == y && y == z\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 12. Definir la funci\u00f3n tresDiferentes tal que \r\n-- (tresDiferentes x y z) se verifica si los elementos x, y y z son\r\n-- distintos. Por ejemplo, \r\n--    tresDiferentes 3 5 2  ==  True\r\n--    tresDiferentes 3 5 3  ==  False\r\n-- ---------------------------------------------------------------------\r\n\r\ntresDiferentes x y z = x \/= y && x \/= z && y \/= z\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 13. Definir la funci\u00f3n cuatroIguales tal que \r\n-- (cuatroIguales x y z u) se verifica si los elementos x, y, z y u son\r\n-- iguales. Por ejemplo, \r\n--    cuatroIguales 5 5 5 5   ==  True\r\n--    cuatroIguales 5 5 4 5   ==  False\r\n-- Indicaci\u00f3n: Usar la funci\u00f3n tresIguales.\r\n-- ---------------------------------------------------------------------\r\n\r\ncuatroIguales x y z u = x == y && tresIguales y z u\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 14. Definir la funci\u00f3n maxTres tal que (maxTres x y z) es\r\n-- el m\u00e1ximo de x, y y z. Por ejemplo,\r\n--    maxTres 6 2 4  ==  6\r\n--    maxTres 6 7 4  ==  7\r\n--    maxTres 6 7 9  ==  9\r\n-- ---------------------------------------------------------------------\r\n\r\nmaxTres x y z = max x (max y z)\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 15. Definir la funci\u00f3n divisionSegura tal que\r\n-- (divisionSegura x y) es x\/y si y no es cero e y 9999 en caso\r\n-- contrario. Por ejemplo,\r\n--    divisionSegura 7 2  ==  3.5\r\n--    divisionSegura 7 0  ==  9999.0\r\n-- ---------------------------------------------------------------------\r\n\r\ndivisionSegura _ 0 = 9999\r\ndivisionSegura x y = x\/y\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 16. En geometr\u00eda, la f\u00f3rmula de Her\u00f3n, descubierta por\r\n-- Her\u00f3n de Alejandr\u00eda, dice que el \u00e1rea de un tri\u00e1ngulo cuyo lados\r\n-- miden a, b y c es la ra\u00edz cuadrada de s(s-a)(s-b)(s-c) donde s es el\r\n-- semiper\u00edmetro \r\n--    s = (a+b+c)\/2\r\n-- Definir la funci\u00f3n area tal que (area a b c) es el \u00e1rea de un\r\n-- tri\u00e1ngulo de lados a, b y c. Por ejemplo,\r\n--    area 3 4 5  ==  6.0\r\n-- ---------------------------------------------------------------------\r\n\r\narea a b c = sqrt (s*(s-a)*(s-b)*(s-c))\r\n             where s = (a+b+c)\/2\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>En la clase de hoy de Inform\u00e1tica de 1\u00ba del Grado en Matem\u00e1ticas hemos comentado las soluciones a los ejercicios de la 1\u00aa relaci\u00f3n. Los ejercicios y su soluci\u00f3n se muestran a continuaci\u00f3n<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"footnotes":"","_jetpack_memberships_contains_paid_content":false},"categories":[186],"tags":[295],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":false,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/1622"}],"collection":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/comments?post=1622"}],"version-history":[{"count":2,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/1622\/revisions"}],"predecessor-version":[{"id":1624,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/1622\/revisions\/1624"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/media?parent=1622"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/categories?post=1622"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/tags?post=1622"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}