Pensions P11570


Statement
 

pdf   zip

html

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.

  1. Feu una funció promigDespeses :: Avi -> Int en que, donat un Avi, retorni el promig de les despeses arrodonit a Int.
  2. 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.
  3. 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.
  4. 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.
  5. 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.

Observació

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

Public test cases
  • 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)
    
  • Information
    Author
    Gerard Escudero i professors de l'ETSEIB del departament de CS
    Language
    Catalan
    Official solutions
    Haskell
    User solutions
    Haskell