Exercici 3.a - Constructors, destructors i fitxers · Metodologia de la Programació UAB 2024

Tema: Constructors, destructors i fitxers · Del examen Examen Primer Parcial Curs 2024-2025 (2024)

Enunciado

Per gestionar l'organització d'un projecte i les persones assignades a cadascuna de les tasques es disposa de l'estructura de classes següent:

class Tasca {

private:

string m_nom;

int m_carregaTreball;

bool m_prioritatAlta;

string m_competenciesNecessaries[MAX_COMPETENCIES];

int m_nCompetencies;

string m_personaAssignada;

};

class Persona {

private:

string m_nom;

int m_valoracioCompetencies[MAX_COMPETENCIES];

int m_carregaMaxima;

int m_carregaActual;

string m_tasquesAssignades[MAX_TASQUES];

int m_nTasquesAssignades;

int competenciaToIndex(const string& competencia) const;

};

class Projecte {

private:

string m_nom;

Tasca m_tasques[MAX_TASQUES];

int m_nTasques;

Persona m_persones[MAX_PERSONES];

int m_nPersones;

};

Descripció de les dades:

Projecte emmagatzema el conjunt de tasques planificades i els recursos humans disponibles.

Tasca descriu la feina a fer: denominació, càrrega de treball (enter), indicador booleà de prioritat alta, array amb les habilitats requerides i el nom de la persona encarregada.

Persona manté la informació laboral: nom, array amb la qualificació (0 a 10) per cadascuna de les competències del sistema (totes han de tenir un valor assignat, per defecte 0), límit de càrrega de treball admissible, càrrega actual acumulada i registre de tasques que té assignades. El mètode privat competenciaToIndex tradueix el nom textual d'una competència a la seva posició dins l'array:

Competència

Índex array

Programació C++

0

Programació Python

1

Bases de Dades

2

Machine Learning

3

a. (2,5 punts) Constructor de Projecte amb fitxer:

Implementeu un constructor per a la classe Projecte que rebi el camí o nom d'un fitxer de text amb el registre inicial de persones. L'estructura del fitxer és:

nom carrega_maxima n_competencies

competencia_1

valoracio_1

...

competencia_N

valoracio_N Totes les competències no explicitades al fitxer han de quedar amb nota 0. La càrrega actual i el nombre de tasques assignades a la persona s'han d'inicialitzar a 0. Igualment, l'array de tasques del projecte ha de quedar en un estat buit inicial (càrrega 0, sense prioritat alta, 0 competències i sense persona assignada).

Implementeu també qualsevol constructor o mètode addicional necessari a Tasca o Persona.

Enunciado: Exercici 3.a - Constructors, destructors i fitxers · Metodologia de la Programació UAB 2024

Solución

Según los criterios oficiales de corrección

a. (2,5 punts) Constructor de Projecte amb fitxer i mètodes auxiliars

Solución: ```cpp // 1. Inicialització per defecte d'un objecte Tasca Tasca::Tasca() { m_nom = ""; m_carregaTreball = 0; m_prioritatAlta = false; m_nCompetencies = 0; m_personaAssignada = ""; } // 2. Constructor específic per a Persona Persona::Persona(const string& nom, int maxCarrega) { m_nom = nom; m_carregaMaxima = maxCarrega; m_carregaActual = 0; m_nTasquesAssignades = 0; for (int idx = 0; idx < MAX_COMPETENCIES; ++idx) { m_valoracioCompetencies[idx] = 0; } } // Mètode per fixar la qualificació d'una competència a Persona void Persona::setValoracio(const string& comp, int nota) { int pos = competenciaToIndex(comp); if (pos >= 0 && pos < MAX_COMPETENCIES) { m_valoracioCompetencies[pos] = nota; } } // 3. Constructor de Projecte que processa el fitxer de dades Projecte::Projecte(const string& nomFitxer) { m_nPersones = 0; m_nTasques = 0; ifstream canalEntrada(nomFitxer.c_str()); if (canalEntrada.is_open()) { string nomPers; int maxC, nComp; canalEntrada >> nomPers >> maxC >> nComp; while (!canalEntrada.eof()) { Persona novaPers(nomPers, maxC); for (int k = 0; k < nComp; ++k) { string nomC; int puntuacio; canalEntrada >> nomC >> puntuacio; novaPers.setValoracio(nomC, puntuacio); } m_persones[m_nPersones++] = novaPers; canalEntrada >> nomPers >> maxC >> nComp; } canalEntrada.close(); } } ```

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.

Pregunta 3 - Constructors, destructors i fitxers · 2018 ›

Más ejercicios de Constructors, destructors i fitxers