Universidad de Costa Rica
|
|
Duración: dos horas. Lea bien el examen antes de hacerlo. Cuenta la documentación. Cuenta la redacción y la ortografía. Puede hacer el examen con lápiz. Resuelva tres de las cuatro preguntas. ¡No haga más de lo que se le pide!
1) [33 pts]
Lista& Lista::copy(const Lista& LO) { // *this = LO if (&LO == this) { // evita autocopia return *this; } while ( _prm != 0 ) { // borra todo nodo *p = _prm; _prm = _prm->next; delete p; } nodo *p = LO._prm; // copia while (p != 0) { push_back( p->_val ); p = p->next; } return *this; } // Lista::copy() |
1.a) [2 pts]
Dibuje el
modelo de la clase
Lista
.
1.b) [14 pts]
Implemente el
método
Lista::copy()
sin acceder al
Rep de Lista
. Use únicamente los
métodos públicos de Lista
.
1.c) [14 pts]
Implemente Lista::push_front()
sin acceder al
Rep. Puede copiar los valores de la lista, o la lista
completa si lo desea.
1.d) [3 pts]
Explique qué ventaja se deriva de implementar los
métodos de Lista
sin acceder al Rep.
2) [33 pts]
char* strcpy (char *dst, const char *src); /* resultado Copia la hilera "src" sobre "dst" - Termina cuando copia el caracter de fin de hilera '\0' */ /* requiere "dst" debe ser suficientemente grande */ |
2.a) [14 pts] Haga los casos y datos de prueba de caja
negra para la función strcpy()
.
2.b) [5 pts] Implemente strcpy()
. Debe usar
aritmética de punteros.
2.c) [14 pts] Haga los casos y datos de prueba de caja
blanca para la función strcpy()
.
3) [33 pts] El método de ordenamiento de la burbuja intercambia valores en un vector hasta que todo queda ordenado.
A[0].key = -∞; for (i=2; i<n; ++i) { j = i; while (A[j] < A[j-1]) { swap(A[j], A[j-1]); j = j-1 } } |
void ADH_list::swap(ADH_list& L) { /* resultado Intercambia *this <==> L */ nodo *tmp = L._prm; L._prm = _prm; _prm = tmp; } |
3.a) [7 pts]
Especifique el método Lista::Ordena_Burbuja()
para la clase Lista
.
3.b) [26 pts] Implemente
Lista::Ordena_Burbuja()
. Use únicamente los
métodos de la lista que fueron definidos como
públicos en la
tercera tarea programada, evitando de esta forma acceder al
Rep de la lista
[operator=()
,
push_front()
,
push_back()
,
pop_front()
,
pop_back()
,
empty()
,
first()
].
No hace falta que su solución sea eficiente, por lo que
puede usar varias listas temporales para hacer su trabajo.
También puede copiar los valores de la lista.
4) [33 pts] Una manera de lograr que un contenedor sea polimórfico es derivar el objeto contenido de una clase base común,
Chunche
.
4.a) [4 pts]
Declare la clase Chunche
que tiene algunas de las
operaciones básicas de una clase.
4.b) [3 pts] Dibuje la jerarquía de chunches que usted almacenará en la lista porlimórfica: puntos, cuadrados, círculos, autos, casas, animales, perros y gatos.
4.c) [3 pts]
Los nodos de una la lista polimórfica
ListaPoli
contienen dos punteros: el puntero
"next
" hacia el siguiente nodo, y un puntero al
Chunche
que corresponde al nodo. Dibuje el
modelo de la clase
ListaPoli
.
4.d) [8 pts]
Escriba la
declaración del
Rep de ListaPoli
, de su nodo y de su
iterador. Para el
iterador ListaPoli::iterador
use un Rep
que contenga únicamente un puntero hacia el nodo.
ListaPoli::iterador
.
4.g) [7 pts]
Suponga que en la clase Chunche
usted definió
el método virtual Grabe(iostream &)
.
Úselo para implementar una operación que graba toda
la lista. No puede acceder al Rep de la lista.
Adolfo Di Mare <adolfo@di-mare.com>.
|