Exercici 2 · Metodologia de la Programació UAB 2024

Tema: Apuntadors, arrays dinàmics i cost dels mètodes · Del examen Examen Segon Parcial (Curs 2024-2025) (2024)

Enunciado

Exercici 2 (3 punts). Gestió de memòria dinàmica i classe Assignatura

Es disposa de l'especificació següent per a gestionar registres d'alumnes i estructures basades en nodes:

class Estudiant

{

public:

void setNiu(const string& niu);

void setNom(const string& nom);

private:

string m_niu;

string m_nom;

};

class NodeEstudiant

{

public:

Estudiant& getValor() const;

NodeEstudiant* getNext() const;

void setValor(const Estudiant& valor);

void setNext(NodeEstudiant* next);

private:

Estudiant m_valor;

NodeEstudiant* m_next;

};

Fent servir la classe Estudiant establerta prèviament:

a.

Dissenyeu una funció anomenada llegeixEstudiants que sol·liciti per teclat la quantitat de registres a processar i les dades personals de cadascun (primer el NIU i tot seguit el nom), assignant-los dins d'un bloc de memòria dinàmica que la pròpia funció retornarà. Tingueu present que la xifra d'alumnes pot resultar ser 0 (en tal cas retornarà punter nul). La rutina ha de proporcionar el nombre total d'estudiants registrats a través d'un paràmetre tramès per referència.

b.

A partir de la declaració de classe següent:

class Assignatura

{

public:

void afegeixEstudiants();

private:

Estudiant* m_estudiants;

int m_numEstudiants;

};

L'atribut m_estudiants representa un array dinàmic que conté exactament els m_numEstudiants inscrits fins al moment (la mida del bloc coincideix sempre amb la quantitat real de membres).

Programeu el mètode afegeixEstudiants que s'encarregui d'afegir noves matrícules. Per fer la lectura s'ha d'invocar la funció de l'apartat anterior. Les dades obtingudes han de fusionar-se amb les prèviament existents redimensionant l'estructura mitjançant un nou bloc de memòria amb la capacitat exacta acumulada. Cal gestionar adequadament tant la possibilitat que l'assignatura estigui buida prèviament com la que no s'afegeixi cap registre nou.

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

Solución

Según los criterios oficiales de corrección

a. Dissenyeu una funció anomenada llegeixEstudiants que sol·liciti per teclat la quantitat de registres a processar i les dades personals de cadascun...

Solución: ```cpp Estudiant* llegeixEstudiants(int& numEstudiants) { Estudiant* ptrResultat = nullptr; cin >> numEstudiants; if (numEstudiants > 0) { ptrResultat = new Estudiant[numEstudiants]; for (int idx = 0; idx < numEstudiants; ++idx) { string valNiu, valNom; cin >> valNiu; ptrResultat[idx].setNiu(valNiu); cin >> valNom; ptrResultat[idx].setNom(valNom); } } return ptrResultat; } ```

b. Programeu el mètode afegeixEstudiants que s'encarregui d'afegir noves matrícules...

Solución: ```cpp void Assignatura::afegeixEstudiants() { int nNous = 0; Estudiant* nous = llegeixEstudiants(nNous); if (nous != nullptr) { int nTotal = m_numEstudiants + nNous; Estudiant* blocCombinat = new Estudiant[nTotal]; if (m_estudiants != nullptr) { for (int i = 0; i < m_numEstudiants; ++i) { blocCombinat[i] = m_estudiants[i]; } delete[] m_estudiants; } for (int j = 0; j < nNous; ++j) { blocCombinat[m_numEstudiants + j] = nous[j]; } delete[] nous; m_estudiants = blocCombinat; m_numEstudiants = nTotal; } } ```

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 1 (a, b) - Apuntadors i objectes dinàmics · 2024 · Exercici 1 · 2018 ›

Más ejercicios de Apuntadors, arrays dinàmics i cost dels mètodes