Diferència entre revisions de la pàgina «POO Exercicis»

De Cacauet Wiki
Salta a la navegació Salta a la cerca
Línia 21: Línia 21:
  
 
El menú ha de permetre:
 
El menú ha de permetre:
* Crear nova lliga: carregar un arxiu de configuració ("equips.cfg") amb el nom dels equips.
+
# Crear nova lliga: carregar un arxiu de configuració ("equips.cfg") amb el nom dels equips.
* Entrar les dades d'un partit: t'ha de demanar triar equip local / visitant d'una llista i després entrar el número de gols de cada equip i qui els ha marcat.
+
# Entrar les dades d'un partit: t'ha de demanar triar equip local / visitant d'una llista i després entrar el número de gols de cada equip i qui els ha marcat.
*:De fet, no cal indicar el nº de gols, sinó que vagis entrant el nom dels jugadors que marquen. Quan entris una cadena buida (enter directament) es considerarà acabada l'entrada de dades d'aquell equip.
+
#:De fet, no cal indicar el nº de gols, sinó que vagis entrant el nom dels jugadors que marquen. Quan entris una cadena buida (enter directament) es considerarà acabada l'entrada de dades d'aquell equip.
* Esborrar les dades d'un partit (per si hem comès un error a l'entrar-ho).
+
# Esborrar les dades d'un partit (per si hem comès un error a l'entrar-ho).
** Ho farem esborrant l'objecte Partit (amb un "del"), i tornant a crear l'objecte.
+
#* Ho farem esborrant l'objecte Partit (amb un "del"), i tornant a crear l'objecte.
* Enregistrar les dades d'una lliga en un arxiu de text.
+
# Enregistrar les dades d'una lliga en un arxiu de text.
* Carregar les dades d'una lliga des d'un arxiu de text.
+
# Carregar les dades d'una lliga des d'un arxiu de text.
** Format del fitxer:<pre>nom_equip_local / nom_equip_visitant / jugador_local_gol_1 , jugador_local_gol_2, ... / jugador_visitant_gol_1 , jugador_visitant_gol_2, ...</pre>
+
#* Format del fitxer:<pre>nom_equip_local / nom_equip_visitant / jugador_local_gol_1 , jugador_local_gol_2, ... / jugador_visitant_gol_1 , jugador_visitant_gol_2, ...</pre>
* Calcular i mostrar la '''classificació dels equips'''.
+
# Calcular i mostrar la '''classificació dels equips'''.
* Calcular i mostrar el '''rànking de "pichichis"'''.
+
# Calcular i mostrar el '''rànking de "pichichis"'''.
  
 
<br>
 
<br>

Revisió del 19:28, 3 nov 2012

Lliga de futbol 2.0

Ampliarem l'exercici de l'aplicació de la lliga de futbol realitzat en l'apartat de llistes i diccionaris. En aquest cas els partits els encapsularem en un objecte "Partit" que tindrà per interfície uns mètodes particulars. La manera d'implementar internament la puntuació i l'autor de gol es recomana fer-la amb una llista on s'apunta el nom del jugador, però és optatiu triar algun altre sistema sempre i quan es respecti la interfície proposada.

Lliga futbol partits.png

Requisits:

  • L'aplicació ha de permetre portar la puntuació d'una lliga de futbol.
  • Els equips s'han d'indicar en l'arxiu de configuració "equips.cfg".

Estructura de dades:

  • Les dades les emmagatzemarem en una matriu feta amb diccionaris, és a dir, un diccionari de diccionaris.
  • Cada partit s'emmagatzemarà en objectes Partit com el del model proposat. Cal respectar la interfície.
  • Cadascun dels equips tindrà un diccionari on emmagatzemarà el resultat dels partits (objecte Partit) que ha jugat a casa seva.
    • Exemple 1. Ens adreçarem al resultat d'un partit amb:
      gols_visit = resultats["local"]["visitant"].num_gols_visit()
    • Exemple 2. Podriem imprimir el resultat amb:
      print "Resultat del partit %s-%s: %d-%d" % (local,visitant,gols_local,gols_visit)
  • PISTES: Es recomana inicialitzar la matriu a l'inici de l'aplicació:
    • Carregar l'arxiu "equips.cfg" en una llista.
    • Inicialitzar el diccionari amb
      resultats = {}
    • Cada element serà l'equip local. Caldrà inicialitzar els seus partits amb un bucle iterant pels elements "equip"
      resultats[equip] = {}
    • Fer un bucle per crear el diccionari de diccionaris i inicilitzar cada element Partit:
      resultats["local"]["visitant"] = Partit()

El menú ha de permetre:

  1. Crear nova lliga: carregar un arxiu de configuració ("equips.cfg") amb el nom dels equips.
  2. Entrar les dades d'un partit: t'ha de demanar triar equip local / visitant d'una llista i després entrar el número de gols de cada equip i qui els ha marcat.
    De fet, no cal indicar el nº de gols, sinó que vagis entrant el nom dels jugadors que marquen. Quan entris una cadena buida (enter directament) es considerarà acabada l'entrada de dades d'aquell equip.
  3. Esborrar les dades d'un partit (per si hem comès un error a l'entrar-ho).
    • Ho farem esborrant l'objecte Partit (amb un "del"), i tornant a crear l'objecte.
  4. Enregistrar les dades d'una lliga en un arxiu de text.
  5. Carregar les dades d'una lliga des d'un arxiu de text.
    • Format del fitxer:
      nom_equip_local / nom_equip_visitant / jugador_local_gol_1 , jugador_local_gol_2, ... / jugador_visitant_gol_1 , jugador_visitant_gol_2, ...
  6. Calcular i mostrar la classificació dels equips.
  7. Calcular i mostrar el rànking de "pichichis".


Base de dades d'espectacles

Tenim una companyia de representació que vol fer una web mostrant els espectacles que porten. Necessitem crear els següents objectes amb la jerarquia pertinent i els seus atributs entre parèntesi:

  • Espectacle (id, durada, preu)
    • Escenic (escenari_minim)
      • Teatre (protagonista, actors[], extres[])
      • Clown (principal, secundaris[])
      • Monoleg (monologuista)
    • Animacio
      • Infantil
      • Adults
    • Musical
      • TeatreMusical
      • Rock
      • Ball
    • Dansa
      • Ballet
      • HipHop

Dissenya unes classes amb aquesta jerarquia. La classe Espectacle ha d'implementar els següents mètodes que després cal reescriure en les classes derivades:

  • demana_dades(): demanarà les dades per la consola i les emmagatzemarà en l'objecte.
  • mostra_dades(): formata i mostra les dades pertinents a la classe.

En les classes heredades procura no demanar ni mostrar les dades pertanyents a les superclasses, sinó que només es demanen i mostren les de la pròpia classe. Per poder mostrar/demanar totes les dades utilitza el mètode sobrecarregat de les superclasses.

Finalment realitza un programa que gestioni una llista d'Espectacles per línia de comanda. El programa ha de permetre a l'usuari afegir, llistar i esborrar elements "fulla" (que no tenen fills, això vol dir que no poden ser ni Espectacle, ni Escenic, ni Animacio, ni Musical ni Dansa) en la llista.