{"id":2225,"date":"2012-10-11T17:53:45","date_gmt":"2012-10-11T17:53:45","guid":{"rendered":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/?p=2225"},"modified":"2013-03-08T05:44:48","modified_gmt":"2013-03-08T05:44:48","slug":"i1m2012-ejercicios-de-definiciones-con-condicionales-guardas-y-patrones","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/i1m2012-ejercicios-de-definiciones-con-condicionales-guardas-y-patrones\/","title":{"rendered":"I1M2012: Ejercicios de definiciones con condicionales, guardas y patrones"},"content":{"rendered":"<p>En la clase de hoy del curso <a href=\"http:\/\/www.cs.us.es\/~jalonso\/cursos\/i1m-12\">Inform\u00e1tica (de 1\u00ba de Grado en Matem\u00e1ticas)<\/a> se han comentado las soluciones de los 15 primeros ejercicios de la  <a href=\"https:\/\/www.glc.us.es\/~jalonso\/ejerciciosI1M2012G2\/images\/a\/a9\/Rel_3.hs\">3\u00aa relaci\u00f3n<\/a> sobre definiciones con condicionales, guardas y patrones.<\/p>\n<p>Los ejercicios y sus soluciones se muestran a continuaci\u00f3n<br \/>\n<!--more--><\/p>\n<pre lang=\"haskell\">\r\n-- ---------------------------------------------------------------------\r\n-- Introducci\u00f3n                                                       --\r\n-- ---------------------------------------------------------------------\r\n\r\n-- En esta relaci\u00f3n se presentan ejercicios con definiciones elementales\r\n-- (no recursivas) de funciones que usan condicionales, guardas o\r\n-- patrones. \r\n-- \r\n-- Estos ejercicios se corresponden con el tema 4 cuyas transparencias\r\n-- se encuentran en  \r\n--    http:\/\/www.cs.us.es\/~jalonso\/cursos\/i1m-12\/temas\/tema-4t.pdf\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 1. 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 2. La disyunci\u00f3n excluyente xor de dos f\u00f3rmulas se verifica\r\n-- si una es verdadera y la otra es falsa.\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 2.1. Definir la funci\u00f3n xor_1 que calcule la disyunci\u00f3n\r\n-- excluyente a partir de la tabla de verdad. Usar 4 ecuaciones, una por\r\n-- cada l\u00ednea de la tabla.\r\n-- ---------------------------------------------------------------------\r\n\r\nxor_1 :: Bool -> Bool -> Bool\r\nxor_1 True  True  = False \r\nxor_1 True  False = True\r\nxor_1 False True  = True\r\nxor_1 False False = False\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 2.2. Definir la funci\u00f3n xor_2 que calcule la disyunci\u00f3n\r\n-- excluyente a partir de la tabla de verdad y patrones. Usar 2\r\n-- ecuaciones, una por cada valor del primer argumento.\r\n-- ---------------------------------------------------------------------\r\n\r\nxor_2 :: Bool -> Bool -> Bool\r\nxor_2 True  y = not y\r\nxor_2 False y = y\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 2.3. Definir la funci\u00f3n xor_3 que calcule la disyunci\u00f3n\r\n-- excluyente a partir de la disyunci\u00f3n (||), conjunci\u00f3n (&&) y negaci\u00f3n\r\n-- (not). Usar 1 ecuaci\u00f3n.\r\n-- ---------------------------------------------------------------------\r\n\r\nxor_3 :: Bool -> Bool -> Bool\r\nxor_3 x y = (x || y) && not (x && y)\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 2.4. Definir la funci\u00f3n xor_4 que calcule la disyunci\u00f3n\r\n-- excluyente a partir de desigualdad (\/=). Usar 1 ecuaci\u00f3n.\r\n-- ---------------------------------------------------------------------\r\n\r\nxor_4 :: Bool -> Bool -> Bool\r\nxor_4 x y = x \/= y\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 3. Definir la funci\u00f3n modulo tal que (modulo v) es el\r\n-- m\u00f3dulo del vector v. Por ejemplo,\r\n--    modulo (3,4)  ==  5.0\r\n-- ---------------------------------------------------------------------\r\n\r\nmodulo (x,y) = sqrt(x^2+y^2)\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 4. Las dimensiones de los rect\u00e1ngulos puede representarse \r\n-- por pares; por ejemplo, (5,3) representa a un rect\u00e1ngulo de base 5 y \r\n-- altura 3. Definir la funci\u00f3n mayorRectangulo tal que \r\n-- (mayorRectangulo r1 r2) es el rect\u00e1ngulo de mayor \u00e1rea ente r1 y r2. \r\n-- Por ejemplo,  \r\n--    mayorRectangulo (4,6) (3,7)  ==  (4,6)\r\n--    mayorRectangulo (4,6) (3,8)  ==  (4,6)\r\n--    mayorRectangulo (4,6) (3,9)  ==  (3,9)\r\n-- ---------------------------------------------------------------------\r\n\r\nmayorRectanglo (a,b) (c,d) | a*b >= c*d = (a,b)\r\n                           | otherwise  = (c,d)\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 5. Definir la funci\u00f3n cuadrante tal que (cuadrante p) es\r\n-- es cuadrante del punto p (se supone que p no est\u00e1 sobre los\r\n-- ejes). Por ejemplo,\r\n--    cuadrante (3,5)    ==  1\r\n--    cuadrante (-3,5)   ==  2\r\n--    cuadrante (-3,-5)  ==  3\r\n--    cuadrante (3,-5)   ==  4\r\n-- ---------------------------------------------------------------------\r\n\r\ncuadrante (x,y)\r\n    | x > 0 && y > 0 = 1\r\n    | x < 0 &#038;&#038; y > 0 = 2\r\n    | x < 0 &#038;&#038; y < 0 = 3\r\n    | x > 0 && y < 0 = 4\r\n\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<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>En la clase de hoy del curso Inform\u00e1tica (de 1\u00ba de Grado en Matem\u00e1ticas) se han comentado las soluciones de los 15 primeros ejercicios de la 3\u00aa relaci\u00f3n sobre definiciones con condicionales, guardas y patrones. Los ejercicios y sus soluciones se muestran a continuaci\u00f3n<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","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":[1],"tags":[298],"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\/2225"}],"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=2225"}],"version-history":[{"count":2,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/2225\/revisions"}],"predecessor-version":[{"id":2656,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/2225\/revisions\/2656"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/media?parent=2225"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/categories?post=2225"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/tags?post=2225"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}