Exercici 4 · Metodologia de la Programació UAB 2024
Tema: Ús de les estructures de dades de la STL · Del examen Examen Segon Parcial (Curs 2024-2025) (2024)
Enunciado
Exercici 4 (2,5 punts). Classificació de tasques amb cues i llistes STL
Es disposa de la classe següent per modelar el seguiment d'activitats vinculades a un projecte:
class Tasca
{
public:
string getNom() const;
string getData() const;
int getPrioritat() const;
private:
string m_nom;
string m_data;
int m_prioritat;
};
L'atribut m_data especifica la data de registre i m_prioritat conté un dígit enter del 0 al 5 (on 5 simbolitza la màxima urgència i 0 la mínima).
Les activitats es troben emmagatzemades en un contenidor forward_list<Tasca>, disposades exclusivament per ordre cronològic de creació.
Es necessita generar una nova llista on figurin primer les tasques de major prioritat i, per a elements que tinguin el mateix nivell d'urgència, es mantingui la cronologia originària.
Per il·lustrar-ho, donada la llista inicial següent:
[(T1, 01/01/2025, 1), (T2, 01/02/2025, 2), (T3, 01/03/2025, 1), (T4, 01/04/2025, 5), (T5, 01/05/2025, 2)]
El resultat reordenat ha de quedar així:
[(T4, 01/04/2025, 5), (T2, 01/02/2025, 2), (T5, 01/05/2025, 2), (T1, 01/01/2025, 1), (T3, 01/03/2025, 1)]
Desenvolupeu la funció indicada emprant com a estructura temporal el vector de cues per prioritats ja declarat en el seu interior:
void reordenaTasques(forward_list<Tasca>& llistaOriginal, forward_list<Tasca>& novaLlista)
{
const int MAX_PRIORITATS = 6;
queue<Tasca> cuesPrioritat[MAX_PRIORITATS];
// Completeu el cos de la funció
}

Solución
Según los criterios oficiales de corrección
Desenvolupeu la funció indicada emprant com a estructura temporal el vector de cues per prioritats ja declarat en el seu interior: void reordenaTasques(forward_list<Tasca>& llistaOriginal, forward_list<Tasca>& novaLlista)
Solución: ```cpp // Pas 1: Distribució per cues segons nivell d'urgència for (auto it = llistaOriginal.begin(); it != llistaOriginal.end(); ++it) { int p = it->getPrioritat(); cuesPrioritat[p].push(*it); } // Pas 2: Bolcat ordenat a la nova llista des de la prioritat 5 fins a la 0 auto posInsert = novaLlista.before_begin(); for (int nivell = MAX_PRIORITATS - 1; nivell >= 0; --nivell) { while (!cuesPrioritat[nivell].empty()) { posInsert = novaLlista.insert_after(posInsert, cuesPrioritat[nivell].front()); cuesPrioritat[nivell].pop(); } } ```
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.