{"id":1299,"date":"2011-04-11T05:20:35","date_gmt":"2011-04-11T05:20:35","guid":{"rendered":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/?p=1299"},"modified":"2011-04-13T05:39:42","modified_gmt":"2011-04-13T05:39:42","slug":"i1m2010-6%c2%ba-examen-de-la-evaluacion-continua","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/i1m2010-6%c2%ba-examen-de-la-evaluacion-continua\/","title":{"rendered":"I1M2010: 6\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-10\">Inform\u00e1tica de 1\u00ba del Grado en Matem\u00e1ticas<\/a> se ha realizado el 6\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-- 6\u00ba examen (11 de abril de 2011)\r\n-- ---------------------------------------------------------------------\r\n \r\nimport Data.List\r\nimport Data.Array\r\nimport Monticulo\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 1. [2.5 puntos] Las expresiones aritm\u00e9ticas pueden\r\n-- representarse usando el siguiente tipo de datos\r\n--    data Expr = N Int | V Char | S Expr Expr | P Expr Expr  \r\n--              deriving Show\r\n-- Por ejemplo, la expresi\u00f3n 2*(a+5) se representa por\r\n--    P (N 2) (S (V 'a') (N 5))\r\n-- Definir la funci\u00f3n\r\n--    valor :: Expr -> [(Char,Int)] -> Int                   \r\n-- tal que (valor x e) es el valor de la expresi\u00f3n x en el entorno e (es\r\n-- deir, el valor de la expresi\u00f3n donde las variables de x se sustituyen\r\n-- por los valores seg\u00fan se indican en el entorno e). Por ejemplo,\r\n--    ghci> valor (P (N 2) (S (V 'a') (V 'b'))) [('a',2),('b',5)]\r\n--    14\r\n-- ---------------------------------------------------------------------\r\n\r\ndata Expr = N Int | V Char | S Expr Expr | P Expr Expr  \r\n          deriving Show\r\n                   \r\nvalor :: Expr -> [(Char,Int)] -> Int                   \r\nvalor (N x)   e = x\r\nvalor (V x)   e = head [y | (z,y) <- e, z == x]  \r\nvalor (S x y) e = (valor x e) + (valor y e)\r\nvalor (P x y) e = (valor x e) * (valor y e)\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 2. [2.5] Definir la funci\u00f3n\r\n--    ocurrencias :: Ord a => a -> Monticulo a -> Int\r\n-- tal que (ocurrencias x m) es el n\u00famero de veces que ocurre el\r\n-- elemento x en el mont\u00edculo m. Por ejemplo,\r\n--    ocurrencias 7 (foldr inserta vacio [6,1,7,8,7,5,7])  ==  3\r\n-- ---------------------------------------------------------------------\r\n\r\nocurrencias :: Ord a => a -> Monticulo a -> Int\r\nocurrencias x m\r\n    | esVacio m = 0\r\n    | x < mm    = 0\r\n    | x == mm   = 1 + ocurrencias x rm\r\n    | otherwise = ocurrencias x rm\r\n    where mm = menor m\r\n          rm = resto m\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 3. [2.5 puntos] Se consideran los tipos de los vectores y\r\n-- de las matrices definidos por\r\n--    type Vector a = Array Int a\r\n--    type Matriz a = Array (Int,Int) a\r\n-- Definir la funci\u00f3n\r\n--    diagonal :: Num a => Vector a -> Matriz a\r\n-- tal que (diagonal v) es la matriz cuadrada cuya diagonal es el vector\r\n-- v. Por ejemplo,\r\n--    ghci> diagonal (array (1,3) [(1,7),(2,6),(3,5)])\r\n--    array ((1,1),(3,3)) [((1,1),7),((1,2),0),((1,3),0),\r\n--                         ((2,1),0),((2,2),6),((2,3),0),\r\n--                         ((3,1),0),((3,2),0),((3,3),5)]\r\n-- ---------------------------------------------------------------------\r\n\r\ntype Vector a = Array Int a\r\ntype Matriz a = Array (Int,Int) a\r\n\r\ndiagonal :: Num a => Vector a -> Matriz a\r\ndiagonal v =\r\n    array ((1,1),(n,n))\r\n          [((i,j),f i j) | i <- [1..n], j <- [1..n]]\r\n    where n = snd (bounds v)\r\n          f i j | i == j    = v!i\r\n                | otherwise = 0\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 4. [2.5 puntos] El enunciado del problema 652 de \"N\u00fameros y\r\n-- algo m\u00e1s\" es el siguiente\r\n--    Si factorizamos los factoriales de un n\u00famero en funci\u00f3n de sus\r\n--    divisores primos y sus potencias, \u00bfCu\u00e1l es el menor n\u00famero N tal\r\n--    que entre los factores primos y los exponentes de estos, N!\r\n--    contiene los digitos del cero al nueve? \r\n--    Por ejemplo \r\n--        6! = 2^4*3^2*5^1, le faltan los d\u00edgitos 0,6,7,8 y 9\r\n--       12! = 2^10*3^5*5^2*7^1*11^1, le faltan los d\u00edgitos 4,6,8 y 9\r\n-- Definir la funci\u00f3n \r\n--    digitosDeFactorizacion :: Integer -> [Integer]\r\n-- tal que (digitosDeFactorizacion n) es el conjunto de los d\u00edgitos que\r\n-- aparecen en la factorizaci\u00f3n de n. Por ejemplo,\r\n--    digitosDeFactorizacion (factorial 6)   ==  [1,2,3,4,5]\r\n--    digitosDeFactorizacion (factorial 12)  ==  [0,1,2,3,5,7]\r\n-- Usando la funci\u00f3n anterior, calcular la soluci\u00f3n del problema.\r\n-- ---------------------------------------------------------------------\r\n\r\ndigitosDeFactorizacion :: Integer -> [Integer]\r\ndigitosDeFactorizacion n =\r\n   sort (nub (concat [digitos x | x <- numerosDeFactorizacion n]))\r\n\r\n-- (digitos n) es la lista de los digitos del n\u00famero n. Por ejemplo, \r\n--    digitos 320274  ==  [3,2,0,2,7,4]\r\ndigitos :: Integer -> [Integer]\r\ndigitos n = [read [x] | x <- show n]\r\n\r\n-- (numerosDeFactorizacion n) es el conjunto de los n\u00fameros en la\r\n-- factorizaci\u00f3n de n. Por ejemplo,\r\n--    numerosDeFactorizacion 60  ==  [1,2,3,5]\r\nnumerosDeFactorizacion :: Integer -> [Integer]\r\nnumerosDeFactorizacion n = \r\n   sort (nub (aux (factorizacion n)))\r\n   where aux [] = []\r\n         aux ((x,y):zs) = x : y : aux zs\r\n\r\n-- (factorizaci\u00f3n n) es la factorizaci\u00f3n de n. Por ejemplo,\r\n--    factorizacion 300  ==  [(2,2),(3,1),(5,2)]\r\nfactorizacion :: Integer -> [(Integer,Integer)]\r\nfactorizacion n = \r\n    [(head xs, fromIntegral (length xs)) | xs <- group (factorizacion' n)]\r\n\r\n-- (factorizacion' n) es la lista de todos los factores primos de n; es\r\n-- decir, es una lista de n\u00fameros primos cuyo producto es n. Por ejemplo,\r\n--    factorizacion 300  ==  [2,2,3,5,5]\r\nfactorizacion' :: Integer -> [Integer]\r\nfactorizacion' n | n == 1    = []\r\n                 | otherwise = x : factorizacion' (div n x)\r\n                 where x = menorFactor n\r\n\r\n-- (menorFactor n) es el menor factor primo de n. Por ejemplo,\r\n--    menorFactor 15  ==  3\r\nmenorFactor :: Integer -> Integer\r\nmenorFactor n = head [x | x <- [2..], rem n x == 0]\r\n\r\n-- (factorial n) es el factorial de n. Por ejemplo,\r\n--    factorial 5  ==  120\r\nfactorial :: Integer -> Integer\r\nfactorial n = product [1..n]\r\n\r\n-- Para calcular la soluci\u00f3n, se define la constante\r\nsolucion = \r\n    head [n | n <- [1..], digitosDeFactorizacion (factorial n) == [0..9]]\r\n\r\n-- El c\u00e1lculo de la soluci\u00f3n es\r\n--    ghci> solucion\r\n--    49\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 6\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":"open","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":[133],"tags":[287],"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\/1299"}],"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=1299"}],"version-history":[{"count":3,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/1299\/revisions"}],"predecessor-version":[{"id":1302,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/1299\/revisions\/1302"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/media?parent=1299"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/categories?post=1299"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/tags?post=1299"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}