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.

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 ›