Exercici 1 (a, b) - Apuntadors i objectes dinàmics · 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
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;
};
a.
Tenint definit el vector de referències següent:
Estudiant* estudiants[MAX_ELEMENTS]; L'objectiu del fragment de codi mostrat a continuació consisteix a reservar memòria per a un nou objecte dinàmic a cadascuna de les cel·les que encara no contingui cap instància (és a dir, aquelles amb valor nullptr). Es demana esmenar exclusivament les errades sintàctiques sense incorporar instruccions addicionals ni suprimir-ne cap:
for (int i = 0; i < MAX_ELEMENTS; i++)
{
if (*estudiants[i] == nullptr)
{
*estudiants[i] = new Estudiant();
string niu, nom;
cin >> niu;
estudiants[i].setNiu(niu);
cin >> nom;
estudiants[i].setNom(nom);
}
}
b.
Es presenta una rutina dissenyada per rebre un vector estàtic d'alumnes juntament amb el seu nombre d'elements i crear-ne una rèplica exacta en format dinàmic. Reescribiu completament la funció corregint tant els problemes sintàctics com els d'execució. Tingueu present que s'ha d'emprar la mateixa aritmètica de punters que al codi font primitiu (sense recórrer a la notació d'índex array[i] ni ptrEstudiants[i]):
Estudiant* copiaArrayEstudiants(Estudiant array[], int numEstudiants)
{
Estudiant* ptrEstudiants;
ptrEstudiants = new Estudiant;
for (int i = 0; i < numEstudiants; i++)
{
ptrEstudiants = (array + i);
ptrEstudiants++;
}
delete[] array;
return ptrEstudiants;
}

Solución
Según los criterios oficiales de corrección
a. Es demana esmenar exclusivament les errades sintàctiques sense incorporar instruccions addicionals ni suprimir-ne cap
Solución: ```cpp for (int i = 0; i < MAX_ELEMENTS; i++) { if (estudiants[i] == nullptr) { estudiants[i] = new Estudiant(); string niu, nom; cin >> niu; estudiants[i]->setNiu(niu); cin >> nom; estudiants[i]->setNom(nom); } } ```
b. Reescribiu completament la funció corregint tant els problemes sintàctics com els d'execució. Tingueu present que s'ha d'emprar la mateixa aritmètica de punters que al codi font primitiu (sense recórrer a la notació d'índex array[i] ni ptrEstudiants[i])
Solución: ```cpp Estudiant* copiaArrayEstudiants(Estudiant array[], int numEstudiants) { Estudiant* ptrEstudiants = new Estudiant[numEstudiants]; Estudiant* aux = ptrEstudiants; for (int i = 0; i < numEstudiants; i++) { *ptrEstudiants = *(array + i); ptrEstudiants++; } return aux; } ```
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.