Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Informática
Grado
en
Matemáticas.
Facultad
de
Ciencias
Universidad
de
Málaga
@
José
E.
Gallardo,
Beatriz
Barros,
Pablo
López
2018/2019
Así, la secuencia cíclica de la figura puede ser representada con la lista [1,3,4,7,9], pero
también, por ejemplo, con la lista [4,7,9,1,3].
Define una función mismoCiclo que tome dos listas y devuelva True si ambas representan la
misma secuencia cíclica. Por ejemplo:
mismoCiclo
[1,3,4,7,9]
[9,1,3,4,7]
=>
True
mismoCiclo
[1,3,4,7,9]
[1,2,4,7,9]
=>
False
Observa que los elementos en las listas pueden estar repetidos y esto ha de tenerse en cuanta
al calcular el número de veces que aparece dicho elemento en el resultado. En este ejercicio se
valorará que tu solución utilice la precondición para simplificar y hacer eficiente la
implementación de la función.
1
Asignatura
Informática
Grado
en
Matemáticas.
Facultad
de
Ciencias
Universidad
de
Málaga
@
José
E.
Gallardo,
Beatriz
Barros,
Pablo
López
2018/2019
3.1 Construir
la
función
impares
y
la
función
nicomano.
La
función
impares
devuelve
una
lista
infinita
de
números
impares.
La
función
nicomano
llamará
a
la
función
impares
y
devolverá
el
cubo
de
un
numero
n
utilizando
la
propiedad
de
Nicómaco.
Implementar
la
función
usando
recursividad
(
1
punto)
take 7 impares (1, 3, 5, 7, 9, 11, 13, 15)
nicomano 4 64
nicomano 3 27
nicomano 8 512
3.2 Sin
utilizar
las
funciones
anteriores,
sino
por
el
método
aquí
indicado,
construir
la
función
cubos
que
devuelta
una
lista
infinita
de
los
números
naturales
al
cubo.
Para
ello
se
seguirá
el
siguiente
algoritmo:
3.2.1
Implementar
la
función
empaqueta
tal
que
dada
una
lista
de
elementos,
devuelva
una
lista
con
estos
elementos
empaquetados
del
siguiente
modo:
el
primero,
los
dos
siguientes,
los
tres
siguientes....
hasta
al
final.
Teniendo
en
cuenta
que
la
última
lista
puede
estar
truncada
(es
decir,
puede
que
no
tenga
n+1
elementos
q
que
la
lista
anterior)
empaqueta [1..10] [[1],[2,3], [4, 5, 6], [7, 8, 9, 10]]
empaqueta "matematicas" ["m","at","ema","tica","s"]
empaqueta [1..11] [[1],[2,3], [4, 5, 6], [7, 8, 9, 10] [11]]
empaqueta (take 6 impares) [[1], [3,5], [7, 9,11]]
3.2.2
Implementar
la
función
cubos
(que
no
tiene
ningún
parámetro)
que
utilice
la
función
empaqueta,
y
devuelva
una
lista
infinita
de
los
cubos
de
los
enteros
positivos.
Implementar
esta
función
utilizando
funciones
de
orden
superior
take 5 cubos = [1, 8, 27, 64, 125]
take 10 cubos = [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
Un número romano es una secuencia de letras. Para pasar un número romano a decimal, se
recorren sus letras desde la última a la primera (de derecha a izquierda) y se suman o restan
los valores de cada una de ellas. El valor de la última cifra siempre suma y, para las demás
2
Asignatura
Informática
Grado
en
Matemáticas.
Facultad
de
Ciencias
Universidad
de
Málaga
@
José
E.
Gallardo,
Beatriz
Barros,
Pablo
López
2018/2019
4.1 Define una función llamada valor que tome como entrada una letra y devuelva su
valor.
valor
‘I’
1
valor
‘X’
10
4.2 Define la función recursiva romanoADecimal que tome una cadena de caracteres
(correspondiente a un número romano) y devuelva su valor. Resolver este
apartado con recursividad
3
Asignatura
Informática
Grado
en
Matemáticas.
Facultad
de
Ciencias
Universidad
de
Málaga
@
José
E.
Gallardo,
Beatriz
Barros,
Pablo
López
2018/2019
Ejemplos
sustituirSumando [6, 3, 1, 1, 3, 3] [6,3,2,6]
sustituirSumando [7, 3, 1, 1, 2, 2] [7,3,4,2]
sustituirSumando [6, 3, 1, 1, 3, 3, 2, 1, 1] [6,3,2,6,4]
sustituirSumando [6, 3, 1, 1, 3, 3, 2, 1, 1, 4] [6,3,2,6,8]
7.2
Definir
la
funcion
haskell
las
(de
look-‐and-‐say)
tal
que
dado
un
número
de
inicio
y
un
número
n
de
términos
devuelva
la
secuencia
de
n
términos
correspondiente:
las [1] 6
[[1],[1,1],[2,1],[1,2,1,1],[1,1,1,2,2,1],[3,1,2,2,1,1]]
las [2] 7
[[2],[1,2],[1,1,1,2],[3,1,1,2],[1,3,2,1,1,2],[1,1,1,3,1,2,2,1,1,2],
[3,1,1,3,1,1,2,2,2,1,1,2]]
4
Asignatura
Informática
Grado
en
Matemáticas.
Facultad
de
Ciencias
Universidad
de
Málaga
@
José
E.
Gallardo,
Beatriz
Barros,
Pablo
López
2018/2019
i) Se dividen los votos obtenidos por cada candidatura entre 1, 2, 3… hasta completar el
número de escaños a repartir, que en este caso hemos fijado en 5. De este modo, tenemos
la siguiente matriz bidimensional con una fila por cada partido (sombreado en esta tabla)
ii) Elegiremos de la tabla los 5 cocientes más altos (casillas en rojo en las columnas de
cálculos intermedios), de forma que al partido A corresponderán tres escaños, al partido
B un escaño y al C otro escaño respectivamente. El partido D quedará sin ningún escaño.
Nota de implementación: Utilizar el tipo Int en lugar del tipo Integer, en este problema
5
Asignatura
Informática
Grado
en
Matemáticas.
Facultad
de
Ciencias
Universidad
de
Málaga
@
José
E.
Gallardo,
Beatriz
Barros,
Pablo
López
2018/2019
2)
Implementar
la
función
buscaPosicion
que
recibe
como
entrada
un
elemento
y
una
matriz,
y
devuelve
la
posición
(x,
y)
que
ocupa
ese
elemento
en
la
matriz.
Se
puede
suponer
que
todos
los
elementos
de
la
matriz
son
diferentes.
Si
no
encuentra
el
elemento,
la
función
devolverá
[0,0].
Implementar
la
función
con
recursividad(1punto)
matriz [[23,21,12,15,24],[14,45,21,34,10],[46,36,124,12,10],[12,33,68,29,1]]
buscaPosicion matriz 23 (1,1)
buscaPosicion matriz 45 (2,2)
buscaPosicion matriz 68 (4,3)
buscaPosicion matriz 99 (0,0) – no está en la matriz
3) Implementar
la
función
matrizDhont
que
recibe
la
lista
de
partidos
y
votos
y
el
de
puestos
a
repartir,
y
devuelve
una
lista
de
lista
de
enteros
que
se
corresponde
con
la
tabla
de
votos
repartidos
(la
tabla
gris
del
ejemplo).
Resolver
esta
función
aplicando
listas
por
comprensión
matrizDhont [("A",258020),("B",168030),("C",114040),("D",60050)] 5
[[258020,129010,86007,64505,51604], [168030,84015,56010,42008,33606],
[114040,57020,38013,28510,22808],[60050,30025,20017,15012,12010]]
4)Utilizando
las
funciones
anteriores
y
las
que
considere
necesarias,
implemente
la
función
reparto
que
dados
los
resultados
de
una
votación
y
el
número
de
puestos
a
repartir,
devuelva
la
asignación
de
escaños,
según
el
algoritmo
anterior.
Así
para
el
ejemplo
descrito,
devolvería
reparto [("A",258020),("B",168030),("C",114040),("D",60050)]5
[("A",3),("B",1),("C",1),("D",0)]
6
Asignatura
Informática
Grado
en
Matemáticas.
Facultad
de
Ciencias
Universidad
de
Málaga
@
José
E.
Gallardo,
Beatriz
Barros,
Pablo
López
2018/2019
3) Implementar
una
función
quickcheck
que
permita
demostrar
la
corrección
de
la
función
raizCuadrada
del
apartado
anterior
CALCULO
DE
LA
RAIZ
CUADRADA.
1. Agrupamos
por
parejas
empezando
a
contar
desde
las
unidades
las
2.
unidades.
Por
ejemplo
para
125,
salen
dos
parejas
1-‐25
2.Calculamos
la
raíz
entera
de
la
primera
pareja
4.
Bajamos
la
siguiente
pareja
y
la
unimos
al
valor
calculado
en
el
caso
anterior
7
Asignatura
Informática
Grado
en
Matemáticas.
Facultad
de
Ciencias
Universidad
de
Málaga
@
José
E.
Gallardo,
Beatriz
Barros,
Pablo
López
2018/2019
7.
Subimos
el
5
a
la
parte
superior
derecha,
lo
unimos
al
numero
existente
a
la
derecha.
8.
Restamos
el
producto
obtenido
de
la
expresión
del
apartado
6m
al
valor
que
teníamos
a
la
izquierda,
y
nos
da
14.
9.
Repetimos
el
proceso
con
la
siguente
pareja,
y
asi
sucesivamente
hasta
que
hayamos
usado
todas
las
parejas.
10.
Como
resultado
se
devuelve
el
valor
de
la
parte
derecha,
que
es
la
raiz
cuadrada,
y
el
calculo
restante
de
la
parte
izquierda,
que
es
el
resto
8
Asignatura
Informática
Grado
en
Matemáticas.
Facultad
de
Ciencias
Universidad
de
Málaga
@
José
E.
Gallardo,
Beatriz
Barros,
Pablo
López
2018/2019
9