Universidad de Costa Rica
Escuela de Ciencias de la
Computación e Informática
Profesor Adolfo Di Mare
CI-1201
II Semestre 2002
[<=] [home] [<>] [\/] [=>]
CI-1201 Programación II

Examen Final [solución]

      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().

Soluciones

[mailto:] Adolfo Di Mare <adolfo@di-mare.com>.
Copyright © 2002
Derechos de autor reservados © 2002
[home] <> [/\]