Tenim:
data Avi = Avi {
nom :: [Char],
edat :: Int,
despeses :: [Int]
} deriving (Show)
per emmagatzemar les dades d’un pensionista, on el camp despeses correspon a una sèrie de despeses mensulas enregistrades. A continuació tenim un exemple amb l’inicialització per a quatre pensionistes.
[ Avi { nom = "Joan", edat = 68, despeses = [640, 589, 573]},
Avi { nom = "Pepa", edat = 69, despeses = [710,550,570,698,645,512]},
Avi { nom = "Anna", edat = 72, despeses = [530,534]},
Avi { nom = "Pep", edat = 75, despeses = [770,645,630,650,590,481,602]} ]
Es demanen els codis de diverses funcions. Seguiu el format dels exemples que es mostren a sota. En tots els enunciats podeu suposar que sempre hi ha dades.
Feu una funció @promigDespeses :: Avi -> Int@ en que, donat un Avi, retorni el promig de les despeses arrodonit a Int.
Feu una funció @edatsExtremes :: [Avi] -> (Int, Int)@ en que, donada una llista com la mostrada en l’exemple, retorni l’edat màxima i la mínima dels pensionistes.
Feu una funció @sumaPromig :: [Avi] -> Int@ en que, donada una llista com la mostrada en l’exemple, retorni la suma del promig de les despeses de tots els pensionistes de la llista.
Feu una funció @maximPromig :: [Avi] -> Int@ en que, donada una llista com la mostrada en l’exemple, retorni del promig de les despeses més gran de tots els pensionistes de la llista.
Feu una funció @despesaPromigSuperior :: [Avi] -> Int -> ([Char], Int)@ en que, donada una llista com la mostrada en l’exemple i una despesa, retorni una altra llista amb el nom i l’edat de la primera persona que tingui una mitjana de despesa superior a la despesa. En cas de que no n’hi hagi cap, la funció retornarà @("",0)@.
Les dues primeres funcions valen 15 punts, les dues següents 20 y l’última 30.
Aquest problema està basat en el problema "Pensions" creat per professors del departament de Ciències de la Computació amb docència a l’ETSEIB. Podeu consultar l’original a: http://gie.cs.upc.edu/fi/temes/llistes/Pensions.html
Input
let avis = [ Avi { nom = "Joan", edat = 68, despeses = [640, 589, 573]}, Avi { nom = "Pepa", edat = 69, despeses = [710,550,570,698,645,512]}, Avi { nom = "Anna", edat = 72, despeses = [530,534]}, Avi { nom = "Pep", edat = 75, despeses = [770,645,630,650,590,481,602]} ]
map promigDespeses avis
edatsExtremes avis
sumaPromig avis
maximPromig avis
despesaPromigSuperior avis 600
Output
[601,614,532,624]
(68,75)
2371
624
("Joan",68)