Pregunta 3 - Classes contenidor amb arrays estàti… · Metodologia de la Programació UAB 2018

Tema: Classes contenidor amb arrays estàtics i composició · Del examen Examen Primer Parcial Curs 2018-2019 (2018)

Enunciado

Context

Aquest examen avalua els conceptes de disseny orientat a objectes en C++ mitjançant la creació i gestió d'una lliga de fins a 20 superherois. Es parteix de la declaració bàsica de la classe SuperHeroi:

class SuperHeroi

{

public:

SuperHeroi();

void setNom(string nom) { m_nom = nom; }

void setVelocitat(int velocitat) { m_velocitat = velocitat; }

void setPoder(const string& poder) { m_poder = poder; }

void setVida(int vida) { m_vides = vida; }

void setForca(int forca) { m_forca = forca; }

string getNom() const { return m_nom; }

int getVelocitat() const { return m_velocitat; }

int getVides() const { return m_vides; }

string getPoder() const { return m_poder; }

int getForca() const { return m_forca; }

private:

string m_nom;

int m_velocitat;

string m_poder;

int m_vides;

int m_forca;

};

Pregunta 3 (Cerca, eliminació i enfrontament - 4,5 punts)

Desenvolupeu el codi en C++ dels mètodes següents de la classe LligaSuperHerois:

c)

Cercar un superheroi a la lliga [2 punts]: donat el nom d'un superheroi, determina si es troba a la llista (per exemple, retornant el seu índex o un indicador de no trobat).

d)

Esborrar un superheroi de la lliga [1,5 punts]: donat el seu nom, si existeix a la lliga, elimina'l i reorganitza l'array per mantenir la coherència sense deixar buits.

e)

Enfrontar dos superherois [1 punt]: donats els noms de dos superherois i un criteri (" vides ", " velocitat " o " força "), comprova que ambdós formin part de la lliga, retorna el nom del guanyador i resta 20 unitats de vida al perdedor.

Enunciado: Pregunta 3 - Classes contenidor amb arrays estàti… · Metodologia de la Programació UAB 2018

Solución

Según los criterios oficiales de corrección

c. Cercar un superheroi a la lliga: donat el nom d'un superheroi, determina si es troba a la llista (per exemple, retornant el seu índex o un indicador de no trobat).

Solución: ```cpp int LligaSuperHerois::cercarSuperHeroi(const string& nom) const { int i = 0; bool trobat = false; while (i < m_nSuperherois && !trobat) { if (m_superherois[i].getNom() == nom) trobat = true; else i++; } return trobat ? i : -1; } ```

d. Esborrar un superheroi de la lliga: donat el seu nom, si existeix a la lliga, elimina'l i reorganitza l'array per mantenir la coherència sense deixar buits.

Solución: ```cpp bool LligaSuperHerois::esborrarSuperHeroi(const string& nom) { int pos = cercarSuperHeroi(nom); if (pos == -1) return false; for (int i = pos; i < m_nSuperherois - 1; ++i) { m_superherois[i] = m_superherois[i + 1]; } m_nSuperherois--; return true; } ```

e. Enfrontar dos superherois: donats els noms de dos superherois i un criteri ("vides", "velocitat" o "força"), comprova que ambdós formin part de la lliga, retorna el nom del guanyador i resta 20 unitats de vida al perdedor.

Solución: ```cpp string LligaSuperHerois::enfrontar(const string& nom1, const string& nom2, const string& criteri) { int pos1 = cercarSuperHeroi(nom1); int pos2 = cercarSuperHeroi(nom2); if (pos1 == -1 || pos2 == -1) return ""; int val1 = 0, val2 = 0; if (criteri == "vides") { val1 = m_superherois[pos1].getVides(); val2 = m_superherois[pos2].getVides(); } else if (criteri == "velocitat") { val1 = m_superherois[pos1].getVelocitat(); val2 = m_superherois[pos2].getVelocitat(); } else if (criteri == "força" || criteri == "forca") { val1 = m_superherois[pos1].getForca(); val2 = m_superherois[pos2].getForca(); } if (val1 >= val2) { int videsActuals = m_superherois[pos2].getVides(); m_superherois[pos2].setVida(videsActuals >= 20 ? videsActuals - 20 : 0); return nom1; } else { int videsActuals = m_superherois[pos1].getVides(); m_superherois[pos1].setVida(videsActuals >= 20 ? videsActuals - 20 : 0); return nom2; } } ```

La explicación paso a paso, hecha con IA, es Premium. Premium

Resuélvelo aquí mismo: corrección automática, pistas y solución paso a paso.

‹ Exercici 3.b - Classes contenidor amb arrays està… · 2024 · Pregunta 4 · 2018 ›

Más ejercicios de Classes contenidor amb arrays estàtics i composició