Diferencia entre revisiones de «Relación 1»
De Informática de 1º de Matemáticas [Curso 2021-22, Grupo 2]
Línea 30: | Línea 30: | ||
-- Miguel Ángel Martínez | -- Miguel Ángel Martínez | ||
media3 x y z = .sdfsdfadf | media3 x y z = .sdfsdfadf | ||
-- Manuel Alcaide García, Lucía Hernández, Adriana Gordillo Melero, Irene Ortega Moncayo | -- Manuel Alcaide García, Lucía Hernández, Adriana Gordillo Melero, Irene Ortega Moncayo, Laura Arango | ||
media3 x y z = (x+y+z)/3 | media3 x y z = (x+y+z)/3 | ||
-- Antonio López García | -- Antonio López García | ||
Línea 45: | Línea 45: | ||
sumaMonedas a b c d e = undefined | sumaMonedas a b c d e = undefined | ||
-- Adriana Gordillo Melero, Nicolás Rodríguez Ruiz, Lucía Hernández | -- Adriana Gordillo Melero, Nicolás Rodríguez Ruiz, Lucía Hernández, Laura Arango | ||
sumamonedas a b c d e = a+b*2+c*5+d*10+e*20 | sumamonedas a b c d e = a+b*2+c*5+d*10+e*20 | ||
-- Antonio López García | -- Antonio López García | ||
Línea 58: | Línea 58: | ||
volumenEsfera r = undefined | volumenEsfera r = undefined | ||
-- Adriana Gordillo Melero, Lucía Hernández, Nicolás Rodríguez Ruiz | -- Adriana Gordillo Melero, Lucía Hernández, Nicolás Rodríguez Ruiz, Laura Arango | ||
volumenEsfera r = (4/3)*pi*r^3 | volumenEsfera r = (4/3)*pi*r^3 | ||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
Línea 73: | Línea 73: | ||
--Álvaro Cano | --Álvaro Cano | ||
areaDeCoronaCircular r1 r2 = pi*(r2^2-r1^2) | areaDeCoronaCircular r1 r2 = pi*(r2^2-r1^2) | ||
--Laura Arango | |||
areaDeCoronaCircular r1 r2 = areaCirculo r2 - areaCirculo r1 | |||
where areaCirculo r = pi*r^2 | |||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
-- Ejercicio 5. Definir la función ultimaCifra tal que (ultimaCifra x) | -- Ejercicio 5. Definir la función ultimaCifra tal que (ultimaCifra x) | ||
Línea 80: | Línea 83: | ||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
--Lucía Hernández, Adriana Gordillo Melero | --Lucía Hernández, Adriana Gordillo Melero, Laura Arango | ||
ultimaCifra x = rem x 10 | ultimaCifra x = rem x 10 | ||
Línea 92: | Línea 95: | ||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
--Lucía Hernández | --Lucía Hernández, Laura Arango | ||
maxTres x y z = max(max x y)(z) | maxTres x y z = max(max x y)(z) | ||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
Línea 101: | Línea 104: | ||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
--Lucía Hernández | --Lucía Hernández, Laura Arango | ||
rota1 xs = tail xs ++ [head xs] | rota1 xs = tail xs ++ [head xs] | ||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
Línea 112: | Línea 115: | ||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
-- Lucía Hernández | -- Lucía Hernández, Laura Arango | ||
rota n xs = drop n xs ++ take n xs | rota n xs = drop n xs ++ take n xs | ||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
Línea 121: | Línea 124: | ||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
-- Lucía Hernández | -- Lucía Hernández, Laura Arango | ||
rango xs = [minimum xs] ++ [maximum xs] | rango xs = [minimum xs] ++ [maximum xs] | ||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
Línea 130: | Línea 133: | ||
-- palindromo [3,2,5,6,2,3] == False | -- palindromo [3,2,5,6,2,3] == False | ||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
--Álvaro Cano, José Manuel Sánchez Parra | --Álvaro Cano, José Manuel Sánchez Parra, Laura Arango | ||
palindromo xs = xs == reverse xs | palindromo xs = xs == reverse xs | ||
Línea 141: | Línea 144: | ||
--Lucía Hernández | --Lucía Hernández | ||
interior xs = tail (init xs) | interior xs = tail (init xs) | ||
--Laura Arango | |||
interior xs = drop 1 (init xs) | |||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
Línea 151: | Línea 156: | ||
-- Lucía Hernández | -- Lucía Hernández | ||
finales n xs = reverse (take n (reverse xs)) | finales n xs = reverse (take n (reverse xs)) | ||
--Laura Arango | |||
finales n xs = drop m xs | |||
where m = length xs - n | |||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
-- Ejercicio 13. Definir la función segmento tal que (segmento m n xs) es | -- Ejercicio 13. Definir la función segmento tal que (segmento m n xs) es | ||
Línea 160: | Línea 168: | ||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
segmento m n xs = | --Laura Arango | ||
segmento m n xs = drop (m-1) (reverse (drop a ys)) | |||
where a = length xs - n | |||
ys = reverse xs | |||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
-- Ejercicio 14. Definir la función extremos tal que (extremos n xs) es | -- Ejercicio 14. Definir la función extremos tal que (extremos n xs) es | ||
Línea 169: | Línea 179: | ||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
extremos n xs = | --Laura Arango | ||
extremos n xs = take n xs ++ finales n xs | |||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
-- Ejercicio 15. Definir la función mediano tal que (mediano x y z) es el | -- Ejercicio 15. Definir la función mediano tal que (mediano x y z) es el | ||
Línea 181: | Línea 191: | ||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
mediano x y z = | --Laura Arango | ||
mediano x y z = max x (min y z) | |||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
-- Ejercicio 16. Definir la función tresIguales tal que | -- Ejercicio 16. Definir la función tresIguales tal que | ||
Línea 191: | Línea 201: | ||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
tresIguales x y z = | --Laura Arango | ||
tresIguales x y z = x==y && x==z | |||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
-- Ejercicio 17. Definir la función tresDiferentes tal que | -- Ejercicio 17. Definir la función tresDiferentes tal que | ||
Línea 201: | Línea 211: | ||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
tresDiferentes x y z = | --Laura Arango | ||
tresDiferentes x y z = x/=y && x/=z | |||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
Línea 212: | Línea 223: | ||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
cuatroIguales x y z u = | --Laura Arango | ||
cuatroIguales x y z u = tresIguales x y z == True && x==u | |||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
Línea 228: | Línea 240: | ||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
unicos xs = | --Laura Arango | ||
unicos xs = length (nub xs | |||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
Línea 238: | Línea 251: | ||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
segundoMinimo xs = | --Laura Arango | ||
segundoMinimo xs = sort (nub xs) !! 1 | |||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
Línea 248: | Línea 262: | ||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
kMaximo k xs = | --Laura Arango | ||
kMaximo k xs = reverse (sort (nub xs)) !! (k-1) | |||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
Línea 258: | Línea 273: | ||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
numPermut xs = | --Laura Arango | ||
numPermut xs = length (permutations xs) | |||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
Línea 270: | Línea 286: | ||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
numPares xs = | --Laura Arango | ||
numPares xs = length (nub (filter even xs)) | |||
</source> | </source> |
Revisión del 11:18 24 sep 2021
-- I1M 2021-22: Rel_1.hs (24 de septiembre de 2021)
-- Definiciones por composición sobre números, listas y booleanos.
-- Departamento de Ciencias de la Computación e I.A.
-- Universidad de Sevilla
-- =====================================================================
import Data.List
-- ---------------------------------------------------------------------
-- Introducción --
-- ---------------------------------------------------------------------
-- En esta relación se plantean ejercicios con definiciones de funciones
-- por composición sobre números, listas y booleanos.
--
-- Para solucionar los ejercicios puede ser útil el manual de
-- funciones de Haskell que se encuentra en http://bit.ly/1uJZiqi y su
-- resumen en http://bit.ly/ZwSMHO
-- ---------------------------------------------------------------------
-- Ejercicio 1. Definir la función media3 tal que (media3 x y z) es
-- la media aritmética de los números x, y y z. Por ejemplo,
-- media3 1 3 8 == 4.0
-- media3 (-1) 0 7 == 2.0
-- media3 (-3) 0 3 == 0.0
-- ---------------------------------------------------------------------
media3 x y z = undefined
-- Miguel Ángel Martínez
media3 x y z = .sdfsdfadf
-- Manuel Alcaide García, Lucía Hernández, Adriana Gordillo Melero, Irene Ortega Moncayo, Laura Arango
media3 x y z = (x+y+z)/3
-- Antonio López García
media3 x y z = (sum [x,y,z])/3
-- ---------------------------------------------------------------------
-- Ejercicio 2. Definir la función sumaMonedas tal que
-- (sumaMonedas a b c d e) es la suma de los euros correspondientes a
-- a monedas de 1 euro, b de 2 euros, c de 5 euros, d 10 euros y
-- e de 20 euros. Por ejemplo,
-- sumaMonedas 0 0 0 0 1 == 20
-- sumaMonedas 0 0 8 0 3 == 100
-- sumaMonedas 1 1 1 1 1 == 38
-- ---------------------------------------------------------------------
sumaMonedas a b c d e = undefined
-- Adriana Gordillo Melero, Nicolás Rodríguez Ruiz, Lucía Hernández, Laura Arango
sumamonedas a b c d e = a+b*2+c*5+d*10+e*20
-- Antonio López García
sumaMonedas a b c d e = sum [a, b*2, c*5, d*10, e*20]
-- ---------------------------------------------------------------------
-- Ejercicio 3. Definir la función volumenEsfera tal que
-- (volumenEsfera r) es el volumen de la esfera de radio r. Por ejemplo,
-- volumenEsfera 10 == 4188.790204786391
-- Indicación: Usar la constante pi.
-- ---------------------------------------------------------------------
volumenEsfera r = undefined
-- Adriana Gordillo Melero, Lucía Hernández, Nicolás Rodríguez Ruiz, Laura Arango
volumenEsfera r = (4/3)*pi*r^3
-- ---------------------------------------------------------------------
-- Ejercicio 4. Definir la función areaDeCoronaCircular tal que
-- (areaDeCoronaCircular r1 r2) es el área de una corona circular de
-- radio interior r1 y radio exterior r2. Por ejemplo,
-- areaDeCoronaCircular 1 2 == 9.42477796076938
-- areaDeCoronaCircular 2 5 == 65.97344572538566
-- areaDeCoronaCircular 3 5 == 50.26548245743669
-- ---------------------------------------------------------------------
--Lucía Hernández, Adriana Gordillo Melero
areaDeCoronaCircular r1 r2 = pi*r2^2 - pi*r1^2
--Álvaro Cano
areaDeCoronaCircular r1 r2 = pi*(r2^2-r1^2)
--Laura Arango
areaDeCoronaCircular r1 r2 = areaCirculo r2 - areaCirculo r1
where areaCirculo r = pi*r^2
-- ---------------------------------------------------------------------
-- Ejercicio 5. Definir la función ultimaCifra tal que (ultimaCifra x)
-- es la última cifra del nímero x. Por ejemplo,
-- ultimaCifra 325 == 5
-- Indicación: Usar la función rem
-- ---------------------------------------------------------------------
--Lucía Hernández, Adriana Gordillo Melero, Laura Arango
ultimaCifra x = rem x 10
-- ---------------------------------------------------------------------
-- Ejercicio 6. Definir la función maxTres tal que (maxTres x y z) es
-- el máximo de x, y y z. Por ejemplo,
-- maxTres 6 2 4 == 6
-- maxTres 6 7 4 == 7
-- maxTres 6 7 9 == 9
-- Indicación: Usar la función max.
-- ---------------------------------------------------------------------
--Lucía Hernández, Laura Arango
maxTres x y z = max(max x y)(z)
-- ---------------------------------------------------------------------
-- Ejercicio 7. Definir la función rota1 tal que (rota1 xs) es la lista
-- obtenida poniendo el primer elemento de xs al final de la lista. Por
-- ejemplo,
-- rota1 [3,2,5,7] == [2,5,7,3]
-- ---------------------------------------------------------------------
--Lucía Hernández, Laura Arango
rota1 xs = tail xs ++ [head xs]
-- ---------------------------------------------------------------------
-- Ejercicio 8. Definir la función rota tal que (rota n xs) es la lista
-- obtenida poniendo los n primeros elementos de xs al final de la
-- lista. Por ejemplo,
-- rota 1 [3,2,5,7] == [2,5,7,3]
-- rota 2 [3,2,5,7] == [5,7,3,2]
-- rota 3 [3,2,5,7] == [7,3,2,5]
-- ---------------------------------------------------------------------
-- Lucía Hernández, Laura Arango
rota n xs = drop n xs ++ take n xs
-- ---------------------------------------------------------------------
-- Ejercicio 9. Definir la función rango tal que (rango xs) es la
-- lista formada por el menor y mayor elemento de xs.
-- rango [3,2,7,5] == [2,7]
-- Indicación: Se pueden usar minimum y maximum.
-- ---------------------------------------------------------------------
-- Lucía Hernández, Laura Arango
rango xs = [minimum xs] ++ [maximum xs]
-- ---------------------------------------------------------------------
-- Ejercicio 10. Definir la función palindromo tal que (palindromo xs) se
-- verifica si xs es un palíndromo; es decir, es lo mismo leer xs de
-- izquierda a derecha que de derecha a izquierda. Por ejemplo,
-- palindromo [3,2,5,2,3] == True
-- palindromo [3,2,5,6,2,3] == False
-- ---------------------------------------------------------------------
--Álvaro Cano, José Manuel Sánchez Parra, Laura Arango
palindromo xs = xs == reverse xs
-- ---------------------------------------------------------------------
-- Ejercicio 11. Definir la función interior tal que (interior xs) es la
-- lista obtenida eliminando los extremos de la lista xs. Por ejemplo,
-- interior [2,5,3,7,3] == [5,3,7]
-- interior [2..7] == [3,4,5,6]
-- ---------------------------------------------------------------------
--Lucía Hernández
interior xs = tail (init xs)
--Laura Arango
interior xs = drop 1 (init xs)
-- ---------------------------------------------------------------------
-- Ejercicio 12. Definir la función finales tal que (finales n xs) es la
-- lista formada por los n finales elementos de xs. Por ejemplo,
-- finales 3 [2,5,4,7,9,6] == [7,9,6]
-- ---------------------------------------------------------------------
--Álvaro Cano
finales n xs = drop n xs
-- Lucía Hernández
finales n xs = reverse (take n (reverse xs))
--Laura Arango
finales n xs = drop m xs
where m = length xs - n
-- ---------------------------------------------------------------------
-- Ejercicio 13. Definir la función segmento tal que (segmento m n xs) es
-- la lista de los elementos de xs comprendidos entre las posiciones m y
-- n. Por ejemplo,
-- segmento 3 4 [3,4,1,2,7,9,0] == [1,2]
-- segmento 3 5 [3,4,1,2,7,9,0] == [1,2,7]
-- segmento 5 3 [3,4,1,2,7,9,0] == []
-- ---------------------------------------------------------------------
--Laura Arango
segmento m n xs = drop (m-1) (reverse (drop a ys))
where a = length xs - n
ys = reverse xs
-- ---------------------------------------------------------------------
-- Ejercicio 14. Definir la función extremos tal que (extremos n xs) es
-- la lista formada por los n primeros elementos de xs y los n finales
-- elementos de xs. Por ejemplo,
-- extremos 3 [2,6,7,1,2,4,5,8,9,2,3] == [2,6,7,9,2,3]
-- ---------------------------------------------------------------------
--Laura Arango
extremos n xs = take n xs ++ finales n xs
-- ---------------------------------------------------------------------
-- Ejercicio 15. Definir la función mediano tal que (mediano x y z) es el
-- número mediano de los tres números x, y y z. Por ejemplo,
-- mediano 3 2 5 == 3
-- mediano 2 4 5 == 4
-- mediano 2 6 5 == 5
-- mediano 2 6 6 == 6
-- Indicación: Usar maximum y minimum.
-- ---------------------------------------------------------------------
--Laura Arango
mediano x y z = max x (min y z)
-- ---------------------------------------------------------------------
-- Ejercicio 16. Definir la función tresIguales tal que
-- (tresIguales x y z) se verifica si los elementos x, y y z son
-- iguales. Por ejemplo,
-- tresIguales 4 4 4 == True
-- tresIguales 4 3 4 == False
-- ---------------------------------------------------------------------
--Laura Arango
tresIguales x y z = x==y && x==z
-- ---------------------------------------------------------------------
-- Ejercicio 17. Definir la función tresDiferentes tal que
-- (tresDiferentes x y z) se verifica si los elementos x, y y z son
-- distintos. Por ejemplo,
-- tresDiferentes 3 5 2 == True
-- tresDiferentes 3 5 3 == False
-- ---------------------------------------------------------------------
--Laura Arango
tresDiferentes x y z = x/=y && x/=z
-- ---------------------------------------------------------------------
-- Ejercicio 18. Definir la función cuatroIguales tal que
-- (cuatroIguales x y z u) se verifica si los elementos x, y, z y u son
-- iguales. Por ejemplo,
-- cuatroIguales 5 5 5 5 == True
-- cuatroIguales 5 5 4 5 == False
-- Indicación: Usar la función tresIguales.
-- ---------------------------------------------------------------------
--Laura Arango
cuatroIguales x y z u = tresIguales x y z == True && x==u
-- ---------------------------------------------------------------------
-- Ejercicios para trabajar con Data.List. Ver:
-- http://www.cs.us.es/~jalonso/cursos/i1m-19/doc/Funciones_basicas.html
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------
-- Ejercicio 19. Definir la función unicos, tal que (unicos xs)
-- devuelva la cantidad de elementos únicos que hay en la lista xs.
-- Por ejemplo,
-- unicos [1,4,8,2,1,4,6,1] == 5
-- unicos [10,9,8,10,5,10] == 4
-- unicos [10,9,8] == 3
-- ---------------------------------------------------------------------
--Laura Arango
unicos xs = length (nub xs
-- ---------------------------------------------------------------------
-- Ejercicio 20. Definir la función segundoMinimo, tal que (segundoMinimo xs)
-- devuelve el segundo elemento más pequeńo de la lista xs, obviando
-- repeticiones. Por ejemplo,
-- segundoMinimo [6,9,2,4] == 4
-- segundoMinimo [0.5,1.2,0.5,4.4,0.5] == 1.2
-- ---------------------------------------------------------------------
--Laura Arango
segundoMinimo xs = sort (nub xs) !! 1
-- ---------------------------------------------------------------------
-- Ejercicio 21. Definir la función kMaximo, tal que (kMaximo n xs)
-- devuelve el k-máximo elemento de xs (es decir, el que está en la
-- posición k de valores más altos), obviando repeticiones. Por ejemplo,
-- kMaximo 2 [6,9,2,4] == 6
-- kMaximo 3 [10,9,8,10,5] == 8
-- ---------------------------------------------------------------------
--Laura Arango
kMaximo k xs = reverse (sort (nub xs)) !! (k-1)
-- ---------------------------------------------------------------------
-- Ejercicio 22. Definir la función numPermut, tal que (numPermut xs)
-- devuelve el número de permutaciones sin repetición posibles con los
-- elementos de la lista xs. Por ejemplo,
-- numPermut [6,2,4] == 6
-- numPermut [10,8,10,5] == 24
-- ---------------------------------------------------------------------
--Laura Arango
numPermut xs = length (permutations xs)
-- ---------------------------------------------------------------------
-- Ejercicio 23 Definir la función numPares, tal que (numPares xs)
-- devuelva cuantos números pares en total (sin repeticiones) aparecen
-- en la lista xs. Por ejemplo,
-- numPares [1,4,8,2,1,4,6,1] == 4
-- numPares [10,9,8,10,5,10] == 2
-- numPares [10,9,8] == 2
-- Indicación: puede ser útil la función partitions
-- ---------------------------------------------------------------------
--Laura Arango
numPares xs = length (nub (filter even xs))