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ó

}

Enunciado: Exercici 4 · Metodologia de la Programació UAB 2024

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.

Exercici 3 · 2018 ›

Más ejercicios de Ús de les estructures de dades de la STL