{"id":3744,"date":"2013-10-08T18:37:35","date_gmt":"2013-10-08T16:37:35","guid":{"rendered":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/?p=3744"},"modified":"2013-10-08T18:37:35","modified_gmt":"2013-10-08T16:37:35","slug":"i1m2013-ejercicios-de-definiciones-con-condicionales-guardas-o-patrones-2","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/i1m2013-ejercicios-de-definiciones-con-condicionales-guardas-o-patrones-2\/","title":{"rendered":"I1M2013: Ejercicios de definiciones con condicionales, guardas o patrones (2)"},"content":{"rendered":"<p>En la segunda parte de la clase de hoy del curso de  <a href=\"http:\/\/www.cs.us.es\/~jalonso\/cursos\/i1m-13\">Inform\u00e1tica de 1\u00ba del Grado en Matem\u00e1ticas<\/a> hemos comentado soluciones de los restantes ejercicios de la 3\u00aa relaci\u00f3n sobre definiciones con condicionales, guardas o patrones. <\/p>\n<p>Los ejercicios y su soluci\u00f3n se muestran a continuaci\u00f3n<br \/>\n<!--more--><\/p>\n<pre lang=\"haskell\">\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 6. Definir la funci\u00f3n intercambia tal que (intercambia p)\r\n-- es el punto obtenido intercambiando las coordenadas del punto p. Por\r\n-- ejemplo, \r\n--    intercambia (2,5)  ==  (5,2)\r\n--    intercambia (5,2)  ==  (2,5)\r\n-- ---------------------------------------------------------------------\r\n\r\nintercambia (x,y) = (y,x)\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 7. Definir la funci\u00f3n simetricoH tal que (simetricoH p) es\r\n-- el punto sim\u00e9trico de p respecto del eje horizontal. Por ejemplo,\r\n--    simetricoH (2,5)   ==  (2,-5)\r\n--    simetricoH (2,-5)  ==  (2,5)\r\n-- ---------------------------------------------------------------------\r\n\r\nsimetricoH (x,y) = (x,-y) \r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 8. Definir la funci\u00f3n distancia tal que (distancia p1 p2)\r\n-- es la distancia entre los puntos p1 y p2. Por ejemplo,\r\n--    distancia (1,2) (4,6)  ==  5.0\r\n-- ---------------------------------------------------------------------\r\n \r\ndistancia (x1,y1) (x2,y2) = sqrt((x1-x2)^2+(y1-y2)^2)\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 9. Definir la funci\u00f3n puntoMedio tal que (puntoMedio p1 p2) \r\n-- es el punto medio entre los puntos p1 y p2. Por ejemplo,\r\n--    puntoMedio (0,2) (0,6)  ==  (0.0,4.0)\r\n--    puntoMedio (-1,2) (7,6) ==  (3.0,4.0)\r\n-- ---------------------------------------------------------------------\r\n\r\npuntoMedio (x1,y1) (x2,y2) = ((x1+x2)\/2, (y1+y2)\/2)\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 10. Los n\u00fameros complejos pueden representarse mediante\r\n-- pares de n\u00fameros complejos. Por ejemplo, el n\u00famero 2+5i puede\r\n-- representarse mediante el par (2,5). \r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 10.1. Definir la funci\u00f3n sumaComplejos tal que \r\n-- (sumaComplejos x y) es la suma de los n\u00fameros complejos x e y. Por\r\n-- ejemplo, \r\n--    sumaComplejos (2,3) (5,6)  ==  (7,9)\r\n-- ---------------------------------------------------------------------\r\n\r\nsumaComplejos (a,b) (c,d) = (a+c, b+d)\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 10.2. Definir la funci\u00f3n productoComplejos tal que \r\n-- (productoComplejos x y) es el producto de los n\u00fameros complejos x e\r\n-- y. Por ejemplo, \r\n--    productoComplejos (2,3) (5,6)  ==  (-8,27)\r\n-- ---------------------------------------------------------------------\r\n\r\nproductoComplejos (a,b) (c,d) = (a*c-b*d, a*d+b*c)\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 10.3. Definir la funci\u00f3n conjugado tal que (conjugado x) es\r\n-- el conjugado del n\u00famero complejo z. Por ejemplo, \r\n--    conjugado (2,3) ==  (2,-3)\r\n-- ---------------------------------------------------------------------\r\n\r\nconjugado (a,b) = (a,-b)\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 11. 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 12. Definir una funci\u00f3n ciclo que permute c\u00edclicamente los\r\n-- elementos de una lista, pasando el \u00faltimo elemento al principio de la\r\n-- lista. Por ejemplo, \r\n--    ciclo [2, 5, 7, 9]  == [9,2,5,7]\r\n--    ciclo []            == [9,2,5,7]\r\n--    ciclo [2]           == [2]\r\n-- ---------------------------------------------------------------------\r\n\r\nciclo [] = []\r\nciclo xs = last xs : init xs\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 13. Definir la funcion numeroMayor tal que \r\n-- (numeroMayor x y) es el mayor n\u00famero de dos cifras que puede\r\n-- construirse con los d\u00edgitos x e y. Por ejemplo,  \r\n--    numeroMayor 2 5 ==  52\r\n--    numeroMayor 5 2 ==  52\r\n-- ---------------------------------------------------------------------\r\n\r\nnumeroMayor x y = a*10 + b\r\n    where a = max x y \r\n          b = min x y\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 14. Definir la funci\u00f3n numeroDeRaices tal que \r\n-- (numeroDeRaices a b c) es el n\u00famero de ra\u00edces reales de la ecuaci\u00f3n \r\n-- a*x^2 + b*x + c = 0. Por ejemplo,\r\n--    numeroDeRaices 2 0 3    ==  0\r\n--    numeroDeRaices 4 4 1    ==  1\r\n--    numeroDeRaices 5 23 12  ==  2\r\n-- ---------------------------------------------------------------------\r\n\r\nnumeroDeRaices a b c | d < 0     = 0\r\n                     | d == 0    = 1\r\n                     | otherwise = 2\r\n               where d = b^2-4*a*c\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 15. (Ra\u00edces de una ecuaci\u00f3n de segundo grado) Definir la\r\n-- funci\u00f3n raices de forma que (raices a b c) devuelve la lista de las\r\n-- raices reales de la ecuaci\u00f3n  ax^2 + bx + c = 0. Por ejemplo, \r\n--    raices 1 (-2) 1 == [1.0,1.0]\r\n--    raices 1 3 2    == [-1.0,-2.0]\r\n-- ---------------------------------------------------------------------\r\n\r\n-- 1\u00aa soluci\u00f3n\r\nraices_1 a b c = [(-b+d)\/t,(-b-d)\/t]\r\n    where d = sqrt (b^2 - 4*a*c)\r\n          t = 2*a\r\n\r\n-- 2\u00aa soluci\u00f3n\r\nraices_2 a b c\r\n    | d >= 0    = [(-b+e)\/(2*a), (-b-e)\/(2*a)]\r\n    | otherwise = error \"No tine raices reales\"\r\n    where d = b^2-4*a*c\r\n          e = sqrt d \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\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 17. Los n\u00fameros racionales pueden representarse mediante\r\n-- pares de n\u00fameros enteros. Por ejemplo, el n\u00famero 2\/5 puede\r\n-- representarse mediante el par (2,5). \r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 17.1. Definir la funci\u00f3n formaReducida tal que\r\n-- (formaReducida x) es la forma reducida del n\u00famero racional x. Por\r\n-- ejemplo, \r\n--    formaReducida (4,10)  ==  (2,5)\r\n-- ---------------------------------------------------------------------\r\n\r\nformaReducida (a,b) = (a `div` c, b  `div` c)\r\n    where c = gcd a b\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 17.2. Definir la funci\u00f3n sumaRacional tal que \r\n-- (sumaRacional x y) es la suma de los n\u00fameros racionales x e y. Por ejemplo,\r\n--    sumaRacional (2,3) (5,6)  ==  (3,2)\r\n-- ---------------------------------------------------------------------\r\n\r\nsumaRacional (a,b) (c,d) = formaReducida (a*d+b*c, b*d)\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 17.3. Definir la funci\u00f3n productoRacional tal que \r\n-- (productoRacional x y) es el producto de los n\u00fameros racionales x e\r\n-- y. Por ejemplo, \r\n--    productoRacional (2,3) (5,6)  ==  (5,9)\r\n-- ---------------------------------------------------------------------\r\n\r\nproductoRacional (a,b) (c,d) = formaReducida (a*c, b*d)\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 17.4. Definir la funci\u00f3n igualdadRacional tal que \r\n-- (igualdadRacional x y) se verifica si los n\u00fameros racionales x e\r\n-- y son iguales. Por ejemplo, \r\n--    igualdadRacional (6,9) (10,15)  ==  True\r\n--    igualdadRacional (6,9) (11,15)  ==  False\r\n-- ---------------------------------------------------------------------\r\n\r\nigualdadRacional (a,b) (c,d) = \r\n    formaReducida (a,b) == formaReducida (c,d)\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 18. El tiempo se puede representar por pares de la forma\r\n-- (m,s) donde m representa los minutos y s los segundos. Definir la\r\n-- funci\u00f3n duracion tal que (duracion t1 t2) es la duraci\u00f3n del\r\n-- intervalo de tiempo que se inicia en t1 y finaliza en t2. Por\r\n-- ejemplo, \r\n--    duracion (2,15) (6,40)  ==  (4,25)\r\n--    duracion (2,40) (6,15)  ==  (3,35)\r\n-- ---------------------------------------------------------------------\r\n\r\ntiempo (m1,s1) (m2,s2)\r\n       | s1 <= s2  = (m2-m1,s2-s1)\r\n       | otherwise = (m2-m1-1,60+s2-s1)\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 19.1. Dada una ecuaci\u00f3n de tercer grado de la forma \r\n--    x^3 + ax^2 + bx + c = 0, \r\n-- donde a, b y c son n\u00fameros reales, se define el discriminante de la\r\n-- ecuaci\u00f3n como\r\n--    d = 4p^3+ 27q^2, \r\n-- donde p = b - a^3\/3 y q = 2a^3\/27 - ab\/3 + c.\r\n-- \r\n-- Definir la funci\u00f3n disc tal que (disc a b c) es el discriminante de\r\n-- la ecuaci\u00f3n  x^3 + ax^2 + bx + c = 0. Por ejemplo,\r\n--    disc 1 (-11) (-9) == -5076.000000000001\r\n-- ---------------------------------------------------------------------\r\n\r\ndisc a b c = 4*p^3 + 27*q^2 \r\n    where p = b - (a^3)\/3 \r\n          q = (2*a^3)\/27 - (a*b)\/3 + c\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 19.2. El signo del discriminante permite determinar el\r\n-- n\u00famero de ra\u00edces reales de la ecuaci\u00f3n: \r\n--    d > 0 : 1 soluci\u00f3n, \r\n--    d = 0 : 2 soluciones y \r\n--    d < 0 : 3 soluciones\r\n-- \r\n-- Definir la funci\u00f3n numSol tal que (numSol a b c) es el n\u00famero de\r\n-- ra\u00edces reales de la ecuaci\u00f3n  x^3 + ax^2 + bx + c = 0. Por ejemplo,\r\n--    numSol 1 (-11) (-9) == 3\r\n-- ---------------------------------------------------------------------\r\n\r\nnumSol a b c\r\n    | d > 0     = 1\r\n    | d == 0    = 2\r\n    | otherwise = 3\r\n    where d = disc a b c \r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>En la segunda parte de la clase de hoy del curso de Inform\u00e1tica de 1\u00ba del Grado en Matem\u00e1ticas hemos comentado soluciones de los restantes ejercicios de la 3\u00aa relaci\u00f3n sobre definiciones con condicionales, guardas o patrones. 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":[222],"tags":[270,300],"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\/3744"}],"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=3744"}],"version-history":[{"count":1,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/3744\/revisions"}],"predecessor-version":[{"id":3745,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/3744\/revisions\/3745"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/media?parent=3744"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/categories?post=3744"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/tags?post=3744"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}