{"id":6266,"date":"2018-10-17T15:39:56","date_gmt":"2018-10-17T13:39:56","guid":{"rendered":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/?p=6266"},"modified":"2018-10-18T09:44:19","modified_gmt":"2018-10-18T07:44:19","slug":"i1m2018-ejercicios-de-definiciones-con-condicionales-guardas-o-patrones-1","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/i1m2018-ejercicios-de-definiciones-con-condicionales-guardas-o-patrones-1\/","title":{"rendered":"I1M2018: Ejercicios de definiciones con condicionales, guardas o patrones (1)"},"content":{"rendered":"<p>En la tercera 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-- Introducci\u00f3n                                                       --\n-- ---------------------------------------------------------------------\n\n-- En esta relaci\u00f3n se presentan ejercicios con definiciones elementales\n-- (no recursivas) de funciones que usan condicionales, guardas o\n-- patrones. \n-- \n-- Estos ejercicios se corresponden con el tema 4 que se encuentran en  \n--    http:\/\/www.cs.us.es\/~jalonso\/cursos\/i1m-18\/temas\/tema-4.html\n\n-- ---------------------------------------------------------------------\n-- Ejercicio 1. Definir la funci\u00f3n \n--    divisionSegura :: Double -> Double -> Double\n-- tal que (divisionSegura x y) es x\/y si y no es cero y 9999 en caso\n-- contrario. Por ejemplo,\n--    divisionSegura 7 2  ==  3.5\n--    divisionSegura 7 0  ==  9999.0\n-- ---------------------------------------------------------------------\n\ndivisionSegura :: Double -> Double -> Double\ndivisionSegura _ 0 = 9999\ndivisionSegura x y = x\/y\n\n-- ---------------------------------------------------------------------\n-- Ejercicio 2.1. La disyunci\u00f3n excluyente xor de dos f\u00f3rmulas se\n-- verifica si una es verdadera y la otra es falsa. Su tabla de verdad\n-- es\n--    x     | y     | xor x y\n--    ------+-------+---------\n--    True  | True  | False \n--    True  | False | True\n--    False | True  | True\n--    False | False | False\n--    \n-- Definir la funci\u00f3n \n--    xor1 :: Bool -> Bool -> Bool\n-- tal que (xor1 x y) es la disyunci\u00f3n excluyente de x e y, calculada a\n-- partir de la tabla de verdad. Usar 4 ecuaciones, una por cada l\u00ednea\n-- de la tabla. \n-- ---------------------------------------------------------------------\n\nxor1 :: Bool -> Bool -> Bool\nxor1 True  True  = False \nxor1 True  False = True\nxor1 False True  = True\nxor1 False False = False\n\n-- ---------------------------------------------------------------------\n-- Ejercicio 2.2. Definir la funci\u00f3n \n--    xor2 :: Bool -> Bool -> Bool\n-- tal que (xor2 x y) es la disyunci\u00f3n excluyente de x e y, calculada a\n-- partir de la tabla de verdad y patrones. Usar 2 ecuaciones, una por\n-- cada valor del primer argumento. \n-- ---------------------------------------------------------------------\n\nxor2 :: Bool -> Bool -> Bool\nxor2 True  y = not y\nxor2 False y = y\n\n-- ---------------------------------------------------------------------\n-- Ejercicio 2.3. Definir la funci\u00f3n \n--    xor3 :: Bool -> Bool -> Bool\n-- tal que (xor3 x y) es la disyunci\u00f3n excluyente de x e y, calculada \n-- a partir de la disyunci\u00f3n (||), conjunci\u00f3n (&&) y negaci\u00f3n (not). \n-- Usar 1 ecuaci\u00f3n. \n-- ---------------------------------------------------------------------\n\n-- 1\u00aa definici\u00f3n:\nxor3 :: Bool -> Bool -> Bool\nxor3 x y = (x || y) && not (x && y)\n\n-- 2\u00aa definici\u00f3n:\nxor3b :: Bool -> Bool -> Bool\nxor3b x y = (x && not y) || (y && not x)\n\n-- ---------------------------------------------------------------------\n-- Ejercicio 2.4. Definir la funci\u00f3n \n--    xor4 :: Bool -> Bool -> Bool\n-- tal que (xor4 x y) es la disyunci\u00f3n excluyente de x e y, calculada\n-- a partir de desigualdad (\/=). Usar 1 ecuaci\u00f3n.\n-- ---------------------------------------------------------------------\n\nxor4 :: Bool -> Bool -> Bool\nxor4 x y = x \/= y\n\n-- ---------------------------------------------------------------------\n-- Ejercicio 3. Las dimensiones de los rect\u00e1ngulos puede representarse \n-- por pares; por ejemplo, (5,3) representa a un rect\u00e1ngulo de base 5 y \n-- altura 3. \n-- \n-- Definir la funci\u00f3n \n--    mayorRectangulo :: (Num a, Ord a) => (a,a) -> (a,a) -> (a,a)\n-- tal que (mayorRectangulo r1 r2) es el rect\u00e1ngulo de mayor \u00e1rea entre\n-- r1 y r2. Por ejemplo,  \n--    mayorRectangulo (4,6) (3,7)  ==  (4,6)\n--    mayorRectangulo (4,6) (3,8)  ==  (4,6)\n--    mayorRectangulo (4,6) (3,9)  ==  (3,9)\n-- ---------------------------------------------------------------------\n\nmayorRectangulo :: (Num a, Ord a) => (a,a) -> (a,a) -> (a,a)\nmayorRectangulo (a,b) (c,d) | a*b >= c*d = (a,b)\n                            | otherwise  = (c,d)\n\n-- ---------------------------------------------------------------------\n-- Ejercicio 4. Definir la funci\u00f3n \n--    intercambia :: (a,b) -> (b,a)\n-- tal que (intercambia p)  es el punto obtenido intercambiando las\n-- coordenadas del punto p. Por ejemplo, \n--    intercambia (2,5)  ==  (5,2)\n--    intercambia (5,2)  ==  (2,5)\n-- ---------------------------------------------------------------------\n\nintercambia :: (a,b) -> (b,a)\nintercambia (x,y) = (y,x)\n\n-- ---------------------------------------------------------------------\n-- Ejercicio 5. Definir la funci\u00f3n \n--    distancia :: (Double,Double) -> (Double,Double) -> Double\n-- tal que (distancia p1 p2) es la distancia entre los puntos p1 y\n-- p2. Por ejemplo, \n--    distancia (1,2) (4,6)  ==  5.0\n-- ---------------------------------------------------------------------\n \ndistancia :: (Double,Double) -> (Double,Double) -> Double\ndistancia (x1,y1) (x2,y2) = sqrt((x1-x2)**2+(y1-y2)**2)\n\n-- ---------------------------------------------------------------------\n-- Ejercicio 6. Definir una funci\u00f3n \n--    ciclo :: [a] -> [a]\n-- tal que (ciclo xs) es la lista obtenida permutando c\u00edclicamente los\n-- elementos de la lista xs, pasando el \u00faltimo elemento al principio de\n-- la lista. Por ejemplo, \n--    ciclo [2,5,7,9]  == [9,2,5,7]\n--    ciclo []         == []\n--    ciclo [2]        == [2]\n-- ---------------------------------------------------------------------\n\nciclo :: [a] -> [a]\nciclo [] = []\nciclo xs = last xs : init xs\n\n-- ---------------------------------------------------------------------\n-- Ejercicio 7. Definir la funci\u00f3n \n--    numeroMayor :: (Num a, Ord a) => a -> a -> a\n-- tal que (numeroMayor x y) es el mayor n\u00famero de dos cifras que puede\n-- construirse con los d\u00edgitos x e y. Por ejemplo,  \n--    numeroMayor 2 5 ==  52\n--    numeroMayor 5 2 ==  52\n-- ---------------------------------------------------------------------\n\n-- 1\u00aa definici\u00f3n:\nnumeroMayor :: (Num a, Ord a) => a -> a -> a\nnumeroMayor x y = 10 * max x y + min x y\n\n-- 2\u00aa definici\u00f3n:\nnumeroMayor2 :: (Num a, Ord a) => a -> a -> a\nnumeroMayor2 x y | x > y     = 10*x+y\n                 | otherwise = 10*y+x\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>En la tercera 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\/6266"}],"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=6266"}],"version-history":[{"count":1,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/6266\/revisions"}],"predecessor-version":[{"id":6267,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/6266\/revisions\/6267"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/media?parent=6266"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/categories?post=6266"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/tags?post=6266"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}