Potencia entera
Definir la función
potencia :: Integer -> Integer -> Integer
tal que potencia x n
es x
elevado al número natural n
. Por ejemplo,
potencia 2 3 == 8
Definir la función
potencia :: Integer -> Integer -> Integer
tal que potencia x n
es x
elevado al número natural n
. Por ejemplo,
potencia 2 3 == 8
Las bases de datos sobre actividades de personas pueden representarse mediante listas de elementos de la forma (a,b,c,d), donde a es el nombre de la persona, b su actividad, c su fecha de nacimiento y d la de su fallecimiento. Un ejemplo es la siguiente que usaremos a lo largo de este ejercicio,
personas :: [(String,String,Int,Int)] personas = [("Cervantes","Literatura",1547,1616), ("Velazquez","Pintura",1599,1660), ("Picasso","Pintura",1881,1973), ("Beethoven","Musica",1770,1823), ("Poincare","Ciencia",1854,1912), ("Quevedo","Literatura",1580,1654), ("Goya","Pintura",1746,1828), ("Einstein","Ciencia",1879,1955), ("Mozart","Musica",1756,1791), ("Botticelli","Pintura",1445,1510), ("Borromini","Arquitectura",1599,1667), ("Bach","Musica",1685,1750)]
Definir las funciones
nombres :: [(String,String,Int,Int)] -> [String] musicos :: [(String,String,Int,Int)] -> [String] seleccion :: [(String,String,Int,Int)] -> String -> [String] musicos' :: [(String,String,Int,Int)] -> [String] vivas :: [(String,String,Int,Int)] -> Int -> [String]
tales que
nombres bd
es la lista de los nombres de las personas de la base de datos bd
. Por ejemplo,λ> nombres personas ["Cervantes","Velazquez","Picasso","Beethoven","Poincare", "Quevedo","Goya","Einstein","Mozart","Botticelli","Borromini", "Bach"]
musicos bd
es la lista de los nombres de los músicos de la base de datos bd
. Por ejemplo,musicos personas == ["Beethoven","Mozart","Bach"]
seleccion bd m
es la lista de los nombres de las personas de la base de datos bd
cuya actividad es m
. Por ejemplo,λ> seleccion personas "Pintura" ["Velazquez","Picasso","Goya","Botticelli"] λ> seleccion personas "Musica" ["Beethoven","Mozart","Bach"]
musicos' bd
es la lista de los nombres de los músicos de la base de datos bd
. Por ejemplo,musicos' personas == ["Beethoven","Mozart","Bach"]
vivas bd a
es la lista de los nombres de las personas de la base de datos bd
que estaban vivas en el año a
. Por ejemplo,λ> vivas personas 1600 ["Cervantes","Velazquez","Quevedo","Borromini"]
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 [0] == [(0,0)]
Definir la función
sumaConsecutivos :: [Integer] -> [Integer]
tal que sumaConsecutivos xs
es la suma de los pares de elementos consecutivos de la lista xs. Por ejemplo,
sumaConsecutivos [3,1,5,2] == [4,6,7] sumaConsecutivos [3] == [] last (sumaConsecutivos [1..10^8]) == 199999999
El producto escalar de dos listas de enteros xs y ys de longitud n viene dado por la suma de los productos de los elementos correspondientes.
Definir la función
productoEscalar :: [Integer] -> [Integer] -> Integer
tal que productoEscalar xs ys
es el producto escalar de las listas xs
e ys
. Por ejemplo,
productoEscalar [1,2,3] [4,5,6] == 32
Una terna pitagórica es una terna de números naturales (a,b,c) tal que a<b<c y a²+b²=c². Por ejemplo (3,4,5) es una terna pitagórica.
Definir la función
ternasPitagoricas :: Integer -> [(Integer,Integer,Integer)]
tal que ternasPitagoricas x
es la lista de las ternas pitagóricas cuya suma es x
. Por ejemplo,
ternasPitagoricas 12 == [(3,4,5)] ternasPitagoricas 60 == [(10,24,26),(15,20,25)] ternasPitagoricas (10^6) == [(218750,360000,421250),(200000,375000,425000)]
Una terna (x,y,z) de enteros positivos es pitagórica si x² + y² = z² y x < y < z.
Definir la función
pitagoricas :: Int -> [(Int,Int,Int)]
tal que pitagoricas n
es la lista de todas las ternas pitagóricas cuyas componentes están entre 1 y n
. Por ejemplo,
pitagoricas 10 == [(3,4,5),(6,8,10)] pitagoricas 15 == [(3,4,5),(5,12,13),(6,8,10),(9,12,15)]
El número π puede calcularse con la fórmula de Leibniz
π/4 = 1 - 1/3 + 1/5 - 1/7 + ...+ (-1)**n/(2*n+1) + ...
Definir las funciones
calculaPi :: Int -> Double errorPi :: Double -> Int
tales que
calculaPi n
es la aproximación del número π calculada mediante la expresión4*(1 - 1/3 + 1/5 - 1/7 + ...+ (-1)**n/(2*n+1))
Por ejemplo,
calculaPi 3 == 2.8952380952380956 calculaPi 300 == 3.1449149035588526
errorPi x
es el menor número de términos de la serie necesarios para obtener pi con un error menor que x
. Por ejemplo,errorPi 0.1 == 9 errorPi 0.01 == 99 errorPi 0.001 == 999
El limite de sen(x)/x, cuando x tiende a cero, se puede calcular como el límite de la sucesión sen(1/n)/(1/n), cuando n tiende a infinito.
Definir las funciones
aproxLimSeno :: Int -> [Double] errorLimSeno :: Double -> Int
tales que
aproxLimSeno n
es la lista de los n
primeros términos de la sucesión sen(1/m)/(1/m)
. Por ejemplo,aproxLimSeno 1 == [0.8414709848078965] aproxLimSeno 2 == [0.8414709848078965,0.958851077208406]
errorLimSeno x
es el menor número de términos de la sucesión sen(1/m)/(1/m)
necesarios para obtener su límite con un error menor que x
. Por ejemplo,errorLimSeno 0.1 == 2 errorLimSeno 0.01 == 5 errorLimSeno 0.001 == 13 errorLimSeno 0.0001 == 41
El número e se define como el límite de la sucesión [latex]\left(1+\dfrac{1}{n}\right)^n[/latex].
Definir las funciones
aproxE :: Int -> [Double] errorAproxE :: Double -> Int
tales que
aproxE k
es la lista de los k
primeros términos de la sucesión. Por ejemplo,aproxE 4 == [2.0,2.25,2.37037037037037,2.44140625] last (aproxE (7*10^7)) == 2.7182818287372563
errorE x
es el menor número de términos de la sucesión necesarios para obtener su límite con un error menor que x
. Por ejemplo,errorAproxE 0.1 == 13 errorAproxE 0.01 == 135 errorAproxE 0.001 == 1359