{"id":6271,"date":"2018-10-19T19:09:19","date_gmt":"2018-10-19T17:09:19","guid":{"rendered":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/?p=6271"},"modified":"2018-10-19T19:09:19","modified_gmt":"2018-10-19T17:09:19","slug":"i1m2018-ejercicios-de-definiciones-con-condicionales-guardas-o-patrones-2","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/i1m2018-ejercicios-de-definiciones-con-condicionales-guardas-o-patrones-2\/","title":{"rendered":"I1M2018: 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-18\">Inform\u00e1tica de 1\u00ba del Grado en Matem\u00e1ticas<\/a> se han comentado las soluciones de ejercicios de la 2\u00aa relaci\u00f3n sobre definiciones con condicionales, guardas o patrones.<\/p>\n<p>Los ejercicios y sus soluciones se muestran a continuaci\u00f3n<br \/>\n<!--more--><\/p>\n<pre lang=\"haskell\">\n-- ---------------------------------------------------------------------\n-- Ejercicio 8. Definir la funci\u00f3n \n--    numeroDeRaices :: (Floating t, Ord t) => t -> t -> t -> Int\n-- tal que (numeroDeRaices a b c) es el n\u00famero de ra\u00edces reales de la\n-- ecuaci\u00f3n a*x^2 + b*x + c = 0. Por ejemplo,\n--    numeroDeRaices 2 0 3    ==  0\n--    numeroDeRaices 4 4 1    ==  1\n--    numeroDeRaices 5 23 12  ==  2\n-- Nota: Se supone que a es no nulo.\n-- ---------------------------------------------------------------------\n\nnumeroDeRaices :: Double -> Double -> Double -> Int\nnumeroDeRaices a b c | d < 0     = 0\n                     | d == 0    = 1\n                     | otherwise = 2\n    where d = b**2-4*a*c\n\n-- 2\u00aa soluci\u00f3n\nnumeroDeRaices2 :: Double -> Double -> Double -> Int\nnumeroDeRaices2 a b c = 1 + round (signum (b**2-4*a*c))\n\n-- ---------------------------------------------------------------------\n-- Ejercicio 9. Definir la funci\u00f3n \n--    raices :: Double -> Double -> Double -> [Double]\n-- tal que (raices a b c) es la lista de las ra\u00edces reales de la\n-- ecuaci\u00f3n ax^2 + bx + c = 0. Por ejemplo, \n--    raices 1 3 2    ==  [-1.0,-2.0]\n--    raices 1 (-2) 1 ==  [1.0,1.0]\n--    raices 1 0 1    ==  []\n-- Nota: Se supone que a es no nulo.\n-- ---------------------------------------------------------------------\n\nraices :: Double -> Double -> Double -> [Double]\nraices a b c \n    | d >= 0    = [(-b+e)\/t,(-b-e)\/t]\n    | otherwise = []\n    where d = b**2 - 4*a*c\n          e = sqrt d\n          t = 2*a\n\n-- ---------------------------------------------------------------------\n-- Ejercicio 10. En geometr\u00eda, la f\u00f3rmula de Her\u00f3n, descubierta por\n-- Her\u00f3n de Alejandr\u00eda, dice que el \u00e1rea de un tri\u00e1ngulo cuyo lados\n-- miden a, b y c es la ra\u00edz cuadrada de s(s-a)(s-b)(s-c) donde s es el\n-- semiper\u00edmetro \n--    s = (a+b+c)\/2\n-- \n-- Definir la funci\u00f3n \n--    area :: Double -> Double -> Double -> Double \n-- tal que (area a b c) es el \u00e1rea del tri\u00e1ngulo de lados a, b y c. Por\n-- ejemplo, \n--    area 3 4 5  ==  6.0\n-- ---------------------------------------------------------------------\n\narea :: Double -> Double -> Double -> Double \narea a b c = sqrt (s*(s-a)*(s-b)*(s-c))\n    where s = (a+b+c)\/2\n\n-- ---------------------------------------------------------------------\n-- Ejercicio 11.1. Los intervalos cerrados se pueden representar mediante\n-- una lista de dos n\u00fameros (el primero es el extremo inferior del\n-- intervalo y el segundo el superior). \n-- \n-- Definir la funci\u00f3n \n--    interseccion :: Ord a => [a] -> [a] -> [a]\n-- tal que (interseccion i1 i2) es la intersecci\u00f3n de los intervalos i1 e\n-- i2. Por ejemplo,\n--    interseccion [] [3,5]     ==  []\n--    interseccion [3,5] []     ==  []\n--    interseccion [2,4] [6,9]  ==  []\n--    interseccion [2,6] [6,9]  ==  [6,6]\n--    interseccion [2,6] [0,9]  ==  [2,6]\n--    interseccion [2,6] [0,4]  ==  [2,4]\n--    interseccion [4,6] [0,4]  ==  [4,4]\n--    interseccion [5,6] [0,4]  ==  []\n-- ---------------------------------------------------------------------\n\ninterseccion :: Ord a => [a] -> [a] -> [a]\ninterseccion [] _ = []\ninterseccion _ [] = []\ninterseccion [a1,b1] [a2,b2]\n    | a <= b    = [a,b]\n    | otherwise = []\n    where a = max a1 a2\n          b = min b1 b2\ninterseccion _ _ = error \"Imposible\"\n\n-- ---------------------------------------------------------------------\n-- Ejercicio 12.1. Los n\u00fameros racionales pueden representarse mediante\n-- pares de n\u00fameros enteros. Por ejemplo, el n\u00famero 2\/5 puede\n-- representarse mediante el par (2,5). \n-- \n-- Definir la funci\u00f3n \n--    formaReducida :: (Int,Int) -> (Int,Int) \n-- tal que (formaReducida x) es la forma reducida del n\u00famero racional\n-- x. Por ejemplo, \n--    formaReducida (4,10)  ==  (2,5)\n--    formaReducida (0,5)   ==  (0,1)\n-- ---------------------------------------------------------------------\n\nformaReducida :: (Int,Int) -> (Int,Int) \nformaReducida (0,_) = (0,1)\nformaReducida (a,b) = (x * signum (a*b), y)\n    where c = gcd a b\n          x = abs (a `div` c)\n          y = abs (b `div` c)\n\n-- ---------------------------------------------------------------------\n-- Ejercicio 12.2. Definir la funci\u00f3n \n--    sumaRacional :: (Int,Int) -> (Int,Int) -> (Int,Int)\n-- tal que (sumaRacional x y) es la suma de los n\u00fameros racionales x e\n-- y, expresada en forma reducida. Por ejemplo, \n--    sumaRacional (2,3) (5,6)  ==  (3,2)\n--    sumaRacional (3,5) (-3,5) ==  (0,1)\n-- ---------------------------------------------------------------------\n\nsumaRacional :: (Int,Int) -> (Int,Int) -> (Int,Int)\nsumaRacional (a,b) (c,d) = formaReducida (a*d+b*c, b*d)\n\n-- ---------------------------------------------------------------------\n-- Ejercicio 12.3. Definir la funci\u00f3n \n--    productoRacional :: (Int,Int) -> (Int,Int) -> (Int,Int)\n-- tal que (productoRacional x y) es el producto de los n\u00fameros\n-- racionales x e y, expresada en forma reducida. Por ejemplo, \n--    productoRacional (2,3) (5,6)  ==  (5,9)\n-- ---------------------------------------------------------------------\n\nproductoRacional :: (Int,Int) -> (Int,Int) -> (Int,Int)\nproductoRacional (a,b) (c,d) = formaReducida (a*c, b*d)\n\n-- ---------------------------------------------------------------------\n-- Ejercicio 12.4. Definir la funci\u00f3n \n--    igualdadRacional :: (Int,Int) -> (Int,Int) -> Bool\n-- tal que (igualdadRacional x y) se verifica si los n\u00fameros racionales\n-- x e y son iguales. Por ejemplo, \n--    igualdadRacional (6,9) (10,15)  ==  True\n--    igualdadRacional (6,9) (11,15)  ==  False\n--    igualdadRacional (0,2) (0,-5)   ==  True\n-- ---------------------------------------------------------------------\n\nigualdadRacional :: (Int,Int) -> (Int,Int) -> Bool\nigualdadRacional (a,b) (c,d) = \n    a*d == b*c\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 se han comentado las soluciones de ejercicios de la 2\u00aa relaci\u00f3n sobre definiciones con condicionales, guardas o 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":[320],"tags":[270,321],"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\/6271"}],"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=6271"}],"version-history":[{"count":1,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/6271\/revisions"}],"predecessor-version":[{"id":6272,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/6271\/revisions\/6272"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/media?parent=6271"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/categories?post=6271"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/tags?post=6271"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}