Examen de Metodologia de la Programació UAB 2024 · Primer Parcial Curs 2024-2025
Examen de Metodologia de la Programació de la UAB (Grado en Ingeniería Informática) 2024, Primer Parcial Curs 2024-2025: 4 problemas con solución. Gratis.
Temas del examen: Disseny de classes: declaració, const i sobrecàrrega d'operadors · Constructors, destructors i fitxers · Classes contenidor amb arrays estàtics i composició
Exercici 1 · Disseny de classes: declaració, const i sobrecàrrega d'operadors
Exercici 1 (1,5 punts). Sobrecàrrega d'operadors a Conjunt
Es vol dissenyar una classe anomenada Conjunt que serveixi per gestionar col·leccions de valors enters mitjançant arrays estàtics. La representació privada definida és la següent:
const int MAX_ELEMENTS = 100;
class Conjunt {
private:
int m_elements[MAX_ELEMENTS];
int m_nElements;
};
Cal afegir la sobrecàrrega dels següents operadors:
Operador binari +: calcula la unió entre dos conjunts, creant i retornant una nova instància sense alterar els dos conjunts d'origen.
Operador binari *: calcula la intersecció de dos conjunts, retornant un nou objecte amb el resultat i preservant intactes els originals.
Operador binari +: insereix un nou número enter a un conjunt existent. L'objecte que fa la crida s'ha de modificar directament i no es retorna cap valor.
Operador ==: avalua si dos conjunts tenen exactament els mateixos elements.
Operador <: comprova si el primer conjunt es troba contingut (inclòs) dins d'un segon conjunt.
Operador >: determina si un valor enter concret forma part dels elements d'un conjunt.
a)
Especifiqueu la declaració de la interfície pública de la classe Conjunt que contingui les capçaleres de tots els operadors esmentats. Presteu atenció als tipus dels paràmetres, als valors retornats i a l'ús adequat del qualificador const (tant en els paràmetres com en els mètodes). Només cal escriure les signatures a la capçalera, no la seva implementació.
b)
Suposant declarades les variables Conjunt c1, c2, c3; int n;, redacteu les instruccions en C++ que executin la següent lògica emprant exclusivament els operadors sobrecarregats a l'apartat anterior:
Verificar si n no pertany a c1; en aquest cas, afegir n a c1 i seguidament calcular la unió de c1 amb c2, emmagatzemant el resultat final a c3.
Calcular la intersecció entre c1 i c2 (emmagatzemada a c3) únicament si c1 no està inclòs dins de c2.
Exercici 2 · Disseny de classes: declaració, const i sobrecàrrega d'operadors
Exercici 2 (1 punt). Const-correctness en classes Notes, Estudiant i Assignatura
Considereu el següent conjunt de declaracions i mètodes de tres classes relacionades:
class Notes {
public:
float getNotaMitjana();
};
class Estudiant {
public:
float consultaNota() const;
string getNom() const;
private:
string m_nom;
Notes m_notes;
};
class Assignatura {
public:
float recuperaEstudiant(const string& nom, Estudiant& e) const;
void afegeixEstudiant(Estudiant& e) const;
private:
Estudiant m_estudiants[MAX_ESTUDIANTS];
int m_nEstudiants;
int cercaEstudiant(const string& nom);
};
float Assignatura::recuperaEstudiant(const string& nom, Estudiant& e) const {
float nota = -1;
int pos = cercaEstudiant(e.getNom());
if (pos != -1) {
e = m_estudiants[pos];
nota = e.consultaNota();
}
return nota;
}
void Assignatura::afegeixEstudiant(Estudiant& e) const {
int pos = cercaEstudiant(e.getNom());
if (pos == -1)
m_estudiants[m_nEstudiants++] = e;
}
float Estudiant::consultaNota() const {
return m_notes.getNotaMitjana();
}
Apliqueu totes les modificacions necessàries a les definicions de les classes Notes, Estudiant i Assignatura perquè l'ús de referències constants i mètodes const sigui consistent i no provoqui errors de compilació. Només cal reescriure la declaració de cadascuna de les classes amb les capçaleres corregides, sense refer el codi de la implementació.
Exercici 3.a - Constructors, destructors i fitxers · Constructors, destructors i fitxers
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.
Exercici 3.b - Classes contenidor amb arrays està… · Classes contenidor amb arrays estàtics i composició
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
b. (5 punts) Mètode d'assignació d'una tasca:
Programeu a la classe Projecte el mètode encarregat d'assignar una persona a una tasca determinada. El mètode rep el nom de la tasca i retorna el nom de la persona triada (o la cadena buida "" si cap és vàlida).
Requisits de selecció: Capacitat de treball: La persona ha de disposar de prou marge per absorbir la càrrega de la tasca ( carregaActual + carregaTasca <= carregaMaxima). No obstant això, si la tasca és de prioritat alta, es permet superar la càrrega màxima en un 10% addicional ( carregaMaxima * 1.1).
Afinació de perfil: D'entre tots els candidats que tinguin capacitat disponible, s'escollirà aquell que calculi la puntuació total més elevada en la suma de valoracions de les competències exigides per la tasca.
Un cop trobat el candidat idoni, cal actualitzar la tasca (amb el nom del treballador) i la persona (afegint la tasca a la seva llista i sumant la nova càrrega a la seva càrrega actual).
Desenvolupeu tots els mètodes auxiliars que calguin a Projecte, Tasca o Persona respectant la modularitat i l'ús correcte de const.
También puedes estudiar por temas
Practica un tema con ejercicios de los exámenes de todos los años, mezclados.
- Classes contenidor amb arrays estàtics i composició · 7 problemas · 50 % de que salga
- Disseny de classes: declaració, const i sobrecàrrega d'operadors · 6 problemas · 50 % de que salga
- Constructors, destructors i fitxers · 4 problemas · 50 % de que salga
- Apuntadors, arrays dinàmics i cost dels mètodes · 4 problemas · 50 % de que salga
- Llistes enllaçades amb nodes · 3 problemas · 50 % de que salga
- Ús de les estructures de dades de la STL · 2 problemas · 50 % de que salga