{"id":2500,"date":"2013-02-06T16:22:45","date_gmt":"2013-02-06T16:22:45","guid":{"rendered":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/?p=2500"},"modified":"2013-03-08T05:47:34","modified_gmt":"2013-03-08T05:47:34","slug":"i1m2012-3%c2%ba-examen-de-la-evaluacion-continua","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/i1m2012-3%c2%ba-examen-de-la-evaluacion-continua\/","title":{"rendered":"I1M2012: 3\u00ba examen de la evaluaci\u00f3n continua"},"content":{"rendered":"<p>En la clase de hoy de <a href=\"http:\/\/www.cs.us.es\/~jalonso\/cursos\/i1m-12\">Inform\u00e1tica de 1\u00ba del Grado en Matem\u00e1ticas<\/a> se ha realizado el 3\u00ba examen de la evaluaci\u00f3n continua.<\/p>\n<p>\nA continuaci\u00f3n se muestra el examen junto con su soluci\u00f3n:<br \/>\n<!--more--><\/p>\n<pre lang=\"haskell\">\r\n-- Inform\u00e1tica (1\u00ba del Grado en Matem\u00e1ticas)\r\n-- 3\u00ba examen de evaluaci\u00f3n continua (6 de febrero de 2013)\r\n-- ---------------------------------------------------------------------\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 1.1. Definir, por recursi\u00f3n, la funci\u00f3n \r\n--    sumaR :: Num a => [[a]] -> a\r\n-- tal que (sumaR xss) es la suma de todos los elementos de todas las\r\n-- listas de xss. Por ejemplo,\r\n--    sumaR [[1,3,5],[2,4,1],[3,7,9]]  ==  35\r\n-- ---------------------------------------------------------------------\r\n\r\nsumaR :: Num a => [[a]] -> a\r\nsumaR []       = 0\r\nsumaR (xs:xss) = sum xs + sumaR xss\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 1.2. Definir, por plegado, la funci\u00f3n \r\n--    sumaP :: Num a => [[a]] -> a\r\n-- tal que (sumaP xss) es la suma de todos los elementos de todas las\r\n-- listas de xss. Por ejemplo,\r\n--    sumaP [[1,3,5],[2,4,1],[3,7,9]]  ==  35\r\n-- ---------------------------------------------------------------------\r\n\r\nsumaP :: Num a => [[a]] -> a\r\nsumaP = foldr (\\x y -> (sum x) + y) 0\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 2. Definir la funci\u00f3n\r\n--    raicesEnteras :: Int -> Int -> Int -> [Int]\r\n-- tal que (raicesEnteras a b c) es la lista de las raices enteras de la\r\n-- ecuaci\u00f3n ax^2+bx+c = 0. Por ejemplo,\r\n--    raicesEnteras 1 (-6) 9     ==  [3]\r\n--    raicesEnteras 1 (-6) 0     ==  [0,6]\r\n--    raicesEnteras 5 (-6) 0     ==  [0]\r\n--    raicesEnteras 1 1 (-6)     ==  [2,-3]\r\n--    raicesEnteras 2 (-1) (-6)  ==  [2]\r\n--    raicesEnteras 2 0 0        ==  [0]\r\n--    raicesEnteras 6 5 (-6)     ==  []\r\n-- Usando raicesEnteras calcular las ra\u00edces de la ecuaci\u00f3n\r\n-- 7x^2-11281x+2665212 = 0. \r\n-- ---------------------------------------------------------------------\r\n\r\nraicesEnteras :: Int -> Int -> Int -> [Int]\r\nraicesEnteras a b c \r\n  | b == 0 && c == 0       = [0]\r\n  | c == 0 && rem b a \/= 0 = [0]\r\n  | c == 0 && rem b a == 0 = [0,-b `div` a]\r\n  | otherwise              = [x | x <- divisores c, a*(x^2) + b*x + c == 0]\r\n\r\n-- (divisores n) es la lista de los divisores enteros de n. Por ejemplo, \r\n--    divisores (-6)  ==  [1,2,3,6,-1,-2,-3,-6]\r\ndivisores :: Int -> [Int]\r\ndivisores n = ys ++ (map (0-) ys)\r\n  where ys = [x | x <-[1..abs n], mod n x == 0] \r\n\r\n-- Una definici\u00f3n alternativa es\r\nraicesEnteras2 a b c = [floor x | x <- raices a b c, esEntero x]\r\n\r\n-- (esEntero x) se verifica si x es un n\u00famero entero.\r\nesEntero x = ceiling x == floor x\r\n\r\n-- (raices a b c) es la lista de las raices reales de la ecuaci\u00f3n\r\n-- ax^2+b*x+c = 0.\r\nraices a b c | d < 0     = []\r\n             | d == 0    = [y1]\r\n             | otherwise = [y1,y2]\r\n  where d = b^2 - 4*a*c\r\n        y1 = ((-b) + sqrt d)\/(2*a)\r\n        y2 = ((-b) - sqrt d)\/(2*a)\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 3. Definir la funci\u00f3n\r\n--    segmentos :: (a -> Bool) -> [a] -> [[a]]\r\n-- tal que (segmentos p xs) es la lista de los segmentos de xs cuyos\r\n-- elementos no verifican la propiedad p. Por ejemplo,\r\n--    segmentos odd [1,2,0,4,5,6,48,7,2]   ==  [[],[2,0,4],[6,48],[2]]\r\n--    segmentos odd [8,6,1,2,0,4,5,6,7,2]  ==  [[8,6],[2,0,4],[6],[2]]\r\n-- ---------------------------------------------------------------------\r\n\r\nsegmentos :: (a -> Bool) -> [a] -> [[a]]\r\nsegmentos _ [] = []\r\nsegmentos p xs = \r\n  takeWhile (not.p) xs : (segmentos p (dropWhile p (dropWhile (not.p) xs)))\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 4.1. Un n\u00famero n es especial si al concatenar n y n+1 se\r\n-- obtiene otro n\u00famero que es divisible entre la suma de n y n+1. Por\r\n-- ejemplo, 1, 4, 16 y 49 son especiales ya que\r\n--        1+2  divide a   12     -       12\/3  =  4\r\n--        4+5  divide a   45     -       45\/9  =  5\r\n--       16+17 divide a 1617     -     1617\/33 = 49\r\n--       49+50 divide a 4950     -     4950\/99 = 50\r\n-- Definir la funci\u00f3n\r\n--    esEspecial :: Integer -> Bool\r\n-- tal que (esEspecial n) se verifica si el n\u00famero obtenido concatenando\r\n-- n y n+1 es divisible entre la suma de n y n+1. Por ejemplo,\r\n--    esEspecial 4  ==  True\r\n--    esEspecial 7  ==  False\r\n-- ---------------------------------------------------------------------\r\n\r\nesEspecial :: Integer -> Bool\r\nesEspecial n = pegaNumeros n (n+1) `rem` (2*n+1) == 0\r\n\r\n-- (pegaNumeros x y) es el n\u00famero resultante de \"pegar\" los\r\n-- n\u00fameros x e y. Por ejemplo, \r\n--    pegaNumeros 12 987   ==  12987\r\n--    pegaNumeros 1204 7   ==  12047\r\n--    pegaNumeros 100 100  ==  100100\r\npegaNumeros :: Integer -> Integer -> Integer\r\npegaNumeros x y\r\n    | y < 10    = 10*x+y\r\n    | otherwise = 10 * pegaNumeros x (y `div` 10) + (y `mod` 10)  \r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 4.2. Definir la funci\u00f3n\r\n--    especiales :: Int -> [Integer]\r\n-- tal que (especiales n) es la lista de los n primeros n\u00fameros\r\n-- especiales. Por ejemplo, \r\n--    especiales 5  ==  [1,4,16,49,166]\r\n-- ---------------------------------------------------------------------\r\n\r\nespeciales :: Int -> [Integer]\r\nespeciales n = take n [x | x <- [1..], esEspecial x]\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>En la clase de hoy de Inform\u00e1tica de 1\u00ba del Grado en Matem\u00e1ticas se ha realizado el 3\u00ba examen de la evaluaci\u00f3n continua. A continuaci\u00f3n se muestra el examen junto con su soluci\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\/2500"}],"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=2500"}],"version-history":[{"count":4,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/2500\/revisions"}],"predecessor-version":[{"id":2698,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/2500\/revisions\/2698"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/media?parent=2500"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/categories?post=2500"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/tags?post=2500"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}