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

Examen #1 [solución]

      Duración: dos horas. Lea bien el examen antes de hacerlo. El examen es a libro abierto. 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]

 L->last ───────────────────────────────────────┐
                                                │
┌────────────┐   ┌────────────┐   ┌───────────┐ │
│            v   │            v   │           v v
│ ┌────────┬───┐ │ ┌────────┬───┐ │ ┌────────┬───┐
│ │ elem_1 │ ├─┼─┘ │ elem_2 │ ├─┼─┘ │ elem_3 │ ├─┼─┐
│ └────────┴───┘   └────────┴───┘   └────────┴───┘ │
│            ^               next              ^   │
│            │                                 │   │
│          first                             last  v
└───────<───────────────<────────────────<─────────┘
clist

      La clase clist es una lista circular, en que el último nodo apunta al primero. A diferencia de una lista tradicional, en que en el Rep hay un puntero al primer nodo, en una lista circular el puntero del Rep apunta al último nodo, de manera que se pueden hacer inserciones eficientemente tanto al principio como al final de la lista.

1.a) [3 pts] Haga la declaración mínima de la clase clist.

1.b) [10 pts] Especifique una rutina que permite intercambiar el primero y segundo valor de una lista circular.

1.c) [20 pts] Implemente la rutina que especificó en el punto anterior. Use únicamente hasta un máximo de 4 instrucciones de asignación de punteros y hasta 2 sentencias "if". No use otro tipo de sentencias. Evite copiar los valores almacenados en la lista. Su algoritmo debe ser general, y debe funcionar para listas que tengan cualquier cantidad de elementos, inclusive cero (0). En su solución usted puede usar sólo un puntero como variable temporal.

1.d) [0 pts] Haga un diagrama que muestra el estado de la lista después de que se ejecuta cada instrucción de asignación.

 

2) [33 pts] Un palíndromo es una palabra que se lee igual al derecho que al revés.

2.a) [5 pts] Explique por qué y para qué hace falta usar el archivo "Tdef.h" para implementar el algoritmo
      bool Palindromo(const Contenedor& C);

2.b) [5 pts] Explique cuál(es) iterador(es) deben estar definidos para la clase Contenedor. En su respuesta, incluya un declaración (sin implementaciones) de los componentes más relevantes de esa clase contenedora y de su(s) iterador(es). En su implementación usted NO puede accesar el Rep del contendor.

2.c) [8 pts] Especifique la función bool Palindromo(const Contenedor& C); que regresa "true" si al recorrer el contenedor "C" hacia adelante se obtiene el mismo resultado que al recorrerlo hacia atrás. Por ejemplo:

Palindromo([1 2 3 2 1]) ==> true
Palindromo([1 2 3 2 0]) ==> false
Palindromo([r a d a r]) ==> true
Palindromo([M A J E M]) ==> false
Palindromo([A N I T A L A V A L A T I N A]) ==> true

2.d) [10 pts] Implemente Palindromo(). En su implementación debe utilizar iteradores.

2.e) [5 pts] Reescriba su implementación pero use para los operadores sobrecargados el nombre que se les da en la declaración. Por ejemplo, si en el algoritmo original aparece a + b, reescriba la implementación para que se lea operator+(a,b).

 

3) [33 pts] Escriba un programa que utilice dos archivos de implementación [uno.cpp y dos.cpp] y un archivo de encabezados [uno.h] que tenga un error pueda sólo ser detectado por el editor de eslabonamiento ("linker").

3.a) [10 pts] Escriba el código de los tres archivos.

3.b) [15 pts] Explique cómo funciona el sistema de compilación separada de C++. Incluya diagramas explicativos y un ejemplo explicativo usando los módulos que ha programado en la quinta tarea. No se olvide de usar diagramas explicativos en su respuesta.

3.c) [8 pts] Explique cómo funciona la compilación separada de los archivos que forman la solución a la quinta tarea programada. Incluya diagramas explicativos. Mencione también si en este caso podría producirse inclusión múltiple.

 

4) [33 pts] Haga un programa C++ que lea un archivo y cuente, para cada letra del alfabeto, la cantidad de letras mayúsculas, minúsculas y números e imprima los totales, para cada una de las letras del alfabeto y cada uno de los dígitos decimales. Recuerde que, en Costa Rica, la pareja "CH" es una letra, y que también el alfabeto incluye a la letra "Ñ". Use como base las clases que usted implementó en la quinta tarea programada. Incluya la declaración mínima de esas clases, que contiene únicamente la declaración de la clase y la declaración de los métodos que use en su implementación.

Soluciones

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