{"id":2262,"date":"2012-10-30T17:42:22","date_gmt":"2012-10-30T17:42:22","guid":{"rendered":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/?p=2262"},"modified":"2013-03-08T05:47:41","modified_gmt":"2013-03-08T05:47:41","slug":"i1m2012-ejercicios-de-definiciones-por-comprension-4","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/i1m2012-ejercicios-de-definiciones-por-comprension-4\/","title":{"rendered":"I1M2012: Ejercicios de definiciones por comprensi\u00f3n (4)"},"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 ejercicios 1 y 2 de la <a href=\"https:\/\/www.glc.us.es\/~jalonso\/ejerciciosI1M2012G2\/images\/a\/a9\/Rel_5.hs\">5\u00aa relaci\u00f3n<\/a> sobre definiciones por comprensi\u00f3n.<\/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 por\r\n-- comprensi\u00f3n correspondientes al tema 5 cuyas transparencias se \r\n-- encuentran en  \r\n--    http:\/\/www.cs.us.es\/~jalonso\/cursos\/i1m-12\/temas\/tema-5.pdf\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 1.1. Una terna (x,y,z) de enteros positivos es pitag\u00f3rica\r\n-- si x^2 + y^2 = z^2. Usando una lista por comprensi\u00f3n, definir la\r\n-- funci\u00f3n \r\n--    pitagoricas :: Int -> [(Int,Int,Int)]\r\n-- tal que (pitagoricas n) es la lista de todas las ternas pitag\u00f3ricas\r\n-- cuyas componentes est\u00e1n entre 1 y n. Por ejemplo, \r\n--    pitagoricas 10  ==  [(3,4,5),(4,3,5),(6,8,10),(8,6,10)]\r\n-- ---------------------------------------------------------------------\r\n\r\npitagoricas :: Int -> [(Int,Int,Int)]\r\npitagoricas n = [(x,y,z) | x <- [1..n],\r\n                           y <- [1..n],\r\n                           z <- [1..n],\r\n                           x^2 + y^2 == z^2]\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 1.2. Definir la funci\u00f3n \r\n--    numeroDePares :: (Int,Int,Int) -> Int\r\n-- tal que (numeroDePares t) es el n\u00famero de elementos pares de la terna\r\n-- t. Por ejemplo,\r\n--    numeroDePares (3,5,7)  ==  0\r\n--    numeroDePares (3,6,7)  ==  1\r\n--    numeroDePares (3,6,4)  ==  2\r\n--    numeroDePares (4,6,4)  ==  3\r\n-- ---------------------------------------------------------------------\r\n\r\nnumeroDePares :: (Int,Int,Int) -> Int\r\nnumeroDePares (x,y,z) = length [1 | n <- [x,y,z], even n]\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 1.3. Definir la funci\u00f3n\r\n--    conjetura :: Int -> Bool\r\n-- tal que (conjetura n) se verifica si todas las ternas pitag\u00f3ricas\r\n-- cuyas componentes est\u00e1n entre 1 y n tiene un n\u00famero impar de n\u00fameros\r\n-- pares. Por ejemplo,\r\n--    conjetura 10  ==  True\r\n-- ---------------------------------------------------------------------\r\n\r\nconjetura :: Int -> Bool\r\nconjetura n = and [odd (numeroDePares t) | t <- pitagoricas n]\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 1.4. Demostrar la conjetura para todas las ternas\r\n-- pitag\u00f3ricas. \r\n-- ---------------------------------------------------------------------\r\n\r\n-- Sea (x,y,z) una terna pitag\u00f3rica. Entonces x^2+y^2=z^2. Pueden darse\r\n-- 4 casos:\r\n-- \r\n-- Caso 1: x e y son pares. Entonces, x^2, y^2 y z^2 tambi\u00e9n lo\r\n-- son. Luego el n\u00famero de componentes pares es 3 que es impar.\r\n-- \r\n-- Caso 2: x es par e y es impar. Entonces, x^2 es par, y^2 es impar y\r\n-- z^2 es impar. Luego el n\u00famero de componentes pares es 1 que es impar.\r\n-- \r\n-- Caso 3: x es impar e y es par. An\u00e1logo al caso 2.\r\n-- \r\n-- Caso 4: x e y son impares. Entonces, x^2 e y^2 tambi\u00e9n son impares y\r\n-- z^2 es par. Luego el n\u00famero de componentes pares es 1 que es impar.\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 2.1. (Problema 9 del Proyecto Euler). Una terna pitag\u00f3rica\r\n-- es una terna de n\u00fameros naturales (a,b,c) tal que a<b<c y\r\n-- a^2+b^2=c^2. Por ejemplo (3,4,5) es una terna pitag\u00f3rica. \r\n-- \r\n-- Definir la funci\u00f3n \r\n--    ternasPitagoricas :: Integer -> [[Integer]]\r\n-- tal que (ternasPitagoricas x) es la lista de las ternas pitag\u00f3ricas\r\n-- cuya suma es x. Por ejemplo,\r\n--    ternasPitagoricas 12  ==  [(3,4,5)]\r\n--    ternasPitagoricas 60  ==  [(10,24,26),(15,20,25)]\r\n-- ---------------------------------------------------------------------\r\n\r\nternasPitagoricas :: Integer -> [(Integer,Integer,Integer)]\r\nternasPitagoricas x = [(a,b,c) | a <- [1..x], \r\n                                 b <- [a+1..x], \r\n                                 c <- [x-a-b], \r\n                                 a^2 + b^2 == c^2]\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 2.2. Definir la constante euler9 tal que euler9 es producto\r\n-- abc donde (a,b,c) es la \u00fanica terna pitag\u00f3rica tal que a+b+c=1000. \r\n-- Calcular el valor de euler9.\r\n-- ---------------------------------------------------------------------\r\n\r\neuler9 = a*b*c\r\n    where (a,b,c) = head (ternasPitagoricas 1000)\r\n\r\n-- El c\u00e1lculo del valor de euler9 es\r\n--    ghci> euler9\r\n--    31875000\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 ejercicios 1 y 2 de la 5\u00aa relaci\u00f3n sobre definiciones por comprensi\u00f3n. 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\/2262"}],"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=2262"}],"version-history":[{"count":3,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/2262\/revisions"}],"predecessor-version":[{"id":2761,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/2262\/revisions\/2761"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/media?parent=2262"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/categories?post=2262"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/tags?post=2262"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}