Pensions X36101


Statement
 

pdf   zip

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