I1M2011: 5º examen de la evaluación continua
En la clase de hoy de Informática de 1º del Grado en Matemáticas se ha realizado el 5º examen de la evaluación continua.
A continuación se muestra el examen junto con su solución:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
-- Informática (1º del Grado en Matemáticas) -- 5º examen de evaluación continua (21 de marzo de 2012) -- --------------------------------------------------------------------- -- --------------------------------------------------------------------- -- Ejercicio 1. [2.5 puntos] Dos números son equivalentes si la media de -- sus cifras son iguales. Por ejemplo, 3205 y 41 son equvalentes ya que -- (3+2+0+5)/4 = (4+1)/2. Definir la función -- equivalentes :: Int -> Int -> Bool -- tal que (equivalentes x y) se verifica si los números x e y son -- equivalentes. Por ejemplo, -- equivalentes 3205 41 == True -- equivalentes 3205 25 == False -- --------------------------------------------------------------------- equivalentes :: Int -> Int -> Bool equivalentes x y = media (cifras x) == media (cifras y) -- (cifras n) es la lista de las cifras de n. Por ejemplo, -- cifras 3205 == [3,2,0,5] cifras :: Int -> [Int] cifras n = [read [y] | y <- show n] -- (media xs) es la media de la lista xs. Por ejemplo, -- media [3,2,0,5] == 2.5 media :: [Int] -> Float media xs = (fromIntegral (sum xs)) / (fromIntegral (length xs)) -- --------------------------------------------------------------------- -- Ejercicio 2. [2.5 puntos] Definir la función -- relacionados :: (a -> a -> Bool) -> [a] -> Bool -- tal que (relacionados r xs) se verifica si para todo par (x,y) de -- elementos consecutivos de xs se cumple la relación r. Por ejemplo, -- relacionados (<) [2,3,7,9] == True -- relacionados (<) [2,3,1,9] == False -- relacionados equivalentes [3205,50,5014] == True -- --------------------------------------------------------------------- relacionados :: (a -> a -> Bool) -> [a] -> Bool relacionados r (x:y:zs) = (r x y) && relacionados r (y:zs) relacionados _ _ = True -- Una definición alternativa es relacionados' :: (a -> a -> Bool) -> [a] -> Bool relacionados' r xs = and [r x y | (x,y) <- zip xs (tail xs)] -- --------------------------------------------------------------------- -- Ejercicio 3. [2.5 puntos] Definir la función -- primosEquivalentes :: Int -> [[Int]] -- tal que (primosEquivalentes n) es la lista de las sucesiones de n -- números primos consecutivos equivalentes. Por ejemplo, -- take 2 (primosEquivalentes 2) == [[523,541],[1069,1087]] -- head (primosEquivalentes 3) == [22193,22229,22247] -- --------------------------------------------------------------------- primosEquivalentes :: Int -> [[Int]] primosEquivalentes n = aux primos where aux (x:xs) | relacionados equivalentes ys = ys : aux xs | otherwise = aux xs where ys = take n (x:xs) -- primos es la lista de los números primos. primos :: [Int] primos = criba [2..] where criba :: [Int] -> [Int] criba (p:xs) = p : criba [x | x <- xs, x `mod` p /= 0] -- --------------------------------------------------------------------- -- Ejercicio 4. [2.5 puntos] Los polinomios pueden representarse -- de forma dispersa o densa. Por ejemplo, el polinomio -- 6x^4-5x^2+4x-7 se puede representar de forma dispersa por -- [6,0,-5,4,-7] y de forma densa por [(4,6),(2,-5),(1,4),(0,-7)]. -- Definir la función -- densa :: [Int] -> [(Int,Int)] -- tal que (densa xs) es la representación densa del polinomio cuya -- representación dispersa es xs. Por ejemplo, -- densa [6,0,-5,4,-7] == [(4,6),(2,-5),(1,4),(0,-7)] -- densa [6,0,0,3,0,4] == [(5,6),(2,3),(0,4)] -- --------------------------------------------------------------------- densa :: [Int] -> [(Int,Int)] densa xs = [(x,y) | (x,y) <- zip [n-1,n-2..0] xs, y /= 0] where n = length xs |