Universidad de Costa Rica
|
|
Duración: dos horas. Lea bien el examen antes de hacerlo. El examen es a libro abierto. Cuenta la redacción y la ortografía. Puede hacer el examen con lápiz. Resuelva todas las preguntas. ¡No haga más de lo que se le pide!
1) [33 pts]
char *itoa( int valor, char *dst, int base ); /* resultado Convierte "valor" en la hilera "dst". - "dst" queda escrito en la base numérica "base". - Retorna "dst". */ /* requiere (base > 0). "dst" debe ser suficientemente grande. */ |
1.a) [14 pts] Haga los casos y datos de prueba de caja
negra para la función itoa()
.
1.b) [2 pts] Implemente itoa()
. No use
aritmética de
punteros.
1.c) [3 pts] Implemente itoa()
. Debe usar
aritmética de
punteros.
1.d) [14 pts] Haga los casos y datos de prueba de caja
blanca para la función itoa()
.
1) [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 */ |
1.a) [14 pts] Haga los casos y datos de prueba de caja
negra para la función strcpy()
.
1.b) [2 pts] Implemente strcpy()
. No use
aritmética de
punteros.
1.c) [3 pts] Implemente strcpy()
. Debe usar
aritmética de
punteros.
1.d) [14 pts] Haga los casos y datos de prueba de caja
blanca para la función strcpy()
.
2) [33 pts]
L | v +-------------+ +-------------+ +-------------+ +-------------+ | | | *-+-->| | | *-+-->| | | *-+-->| | | *-+-> NIL | | 2.2 | | | | 4.5 | | | | 2.2 | | | | 1.3 | | NIL<-+-* | | |<--+-* | | |<--+-* | | |<--+-* | | | +-------------+ +-------------+ +-------------+ +-------------+ |
2.a) [0 pts] Escriba la
declaración de
las clases Arbol
y Lista
, que tienen la
característica que usan el mismo tipo de nodo.
2.b) [7 pts] Especifique la función
Arboleador()
que toma una lista, similar a la de la
figura de arriba, y la convierta en un
árbol binario ordenado el que, al ser recorrido en inorden,
tiene en orden creciente los nodos, aún si hay duplicados.
Incluya un ejemplo de qué hace esta función. Si lo
desea, puede basarse en la especificación genérica
para la operación
Move()
.
2.c) [26 pts] Implemente la función
Arboleador()
, pero evite copiar nodos en su
implementación. Además, debe usar recursividad. Use
los campos "_izq
" y "_der
" del nodo de
la lista para crear el árbol, sin usar nuevos nodos. Como
documentación interna, explique cómo funciona su
implementación.
3) [33 pts]
_prm ----------+ | +-----+-----+-----+-----+-----+-----+-----+-----+-----+ | | | | | | | | | | | | | 2.2 | 4.5 | 2.2 | 1.3 | | | | | | | | | | | | | | +-----+-----+-----+-----+-----+-----+-----+-----+-----+ | +---------------- _ult |
3.a) [0 pts] Explique cómo funciona esta
implementación de la clase Lista
, que tiene
las mismas operaciones de la lista que usted implementó en
la
tercera tarea. Incluya la
declaración del
Rep que corresponde a este diagrama.
3.b) [3 pts]
Declare el
Rep para la clase Lista_Vector
que corresponde al
modelo que se muestra
acá. Debe usar
plantillas.
3.c) [3 pts] Defina la
invariante
para esta clase Lista_Vector
. Implemente la
operación
Lista_Vector::Ok()
que verifica la invariante de la clase.
3.d) [3 pts] Implemente el
constructor y
destructor para la clase Lista_Vector
.
3.e) [24 pts] Implemente los
métodos
push_front()
,
push_back()
,
pop_front()
,
pop_back()
,
empty()
,
first()
,
operator=()
y
swap()
.
Adolfo Di Mare <adolfo@di-mare.com>.
|