Universidad de Costa Rica
|
|
|
|
|
Duración: Ciento veinte minutos. 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 las tres preguntas. ¡No haga más de lo que se le pide!
1) [33 pts] El problema principal de las hileras C++ es que es necesario controlar que tienen al final el "
EOS" que se
representa como "(char)0".
1.a) [6 pts]
Escriba el archivo de encabezado "String_List.h" que
contiene la
abstracción
y la
especificación
para la clase "String_List", que permite usar hileras
implementadas como listas. Use el operador de suma
"+" para concatenar hileras. No
olvide incluir el
Rep. Use la
misma clase lista que utilizó en las
tareas programadas, pero no se
le meta al Rep de la lista.
1.b) [6 pts]
Especifique e
implemente el
operador de asignación para la clase
"String_List".
1.c) [6 pts]
Especifique e
implemente el
constructor de copia para la clase "String_List".
1.d) [6 pts] Especifique e implemente el operador de asignación desde una hilera C++.
1.e) [9 pts] Especifique e implemente el operador de concatenación.
1.f) [0 pts]
Especifique e
implemente el
convertidor de la clase "String_List" a
"(char *)". Explique cómo se debe
administrar la memoria dinámica del objeto retornado.
2) [33 pts] Suponga que usted está implementando una lista doblemente enlazada similar a la de la biblioteca estándar C++ en la que se usa un nodo centinela.
2.a) [0 pts] Declare el Rep de la lista y de su nodo. Use plantillas.
2.b) [5 pts]
Especifique e
implemente el método "unoOdos()" que retorna
"true" cuando la cantidad de valores almacenados en
la lista es "1" o "2". Use dos o menos
comparaciones de
punteros en su implementación; no use ciclos.
2.c) [6 pts]
Especifique e
implemente el
método
"swap()" que
recibe un iterador como argumento e intercambia ese nodo con el
siguiente. Use cirugía de punteros.
2.d) [11 pts]
Utilice únicamente su
método
"swap()" para especificar e implementar la
función "trasladeMayor()"que recibe a una
lista y traslada al final el elemento más grande de la
lista pero nunca los copia.
¡No se le meta al
Rep!
2.e) [11 pts]
Suponga que usted cuenta ya con un método
"splice(list& L)" que toma el último
nodo de la lista "L" y lo pone de primero en la lista
"*this". Implemente la función
"Burbuja(list& L)" que ordena de menor a
mayor los valores almacenados en la lista. En su respuesta utilice
únicamente"splice()" o lo que usted ha
implementado en el examen. ¡No se le meta al
Rep!
3) [33 pts] San Mateo estaba un poco aburrido, así que decidió usar sus denarios para contratar a San Marcos. Le dijo que si toma la Biblia y la separa en palabras, ocurre que la cantidad de palabras cifradas en consonantes y en vocales es la misma. Para poder demostrar esta conjetura, en realidad fue San Lucas quien escribió un programa que la resuelve. Este programa usa 2 diccionarios, uno de consonantes "
C[]" y otro de
vocales "V[]", en los que se depositan todas las
palabras. Por ejemplo, de la frase "San Juan escribió
el Apocalipsis" salen los siguientes grupos de vocales y
consonantes:
V[]: "a ua eiio e aoaii"
C[]: "sn jn scrb l pclpss"
Luego hay que ordenar las letras de las palabras alfabéticamente:
→ V[]: "a au eiio e aaiio"
→ C[]: "ns jn bcrs l clppss"
Por último, hay que meter todas las palabras en el
diccionario respectivo:
→ V[]: V["a"]++; V["au"]++; V["eiio"]++; V["e"]++; V["aaiio"]++;
→ C[]: C["ns"]++; C["jn"]++; C["bcrs"]++; C["l"]++; C["pclpss"]++;
3.a) [0 pts]
Declare los diccionarios "C[]" y "V[]"
para consonantes y vocales. Explique por qué es adecuado
usar
"typedef".
3.b) [8 pts]
Especifique las funciones "separaPalabras()",
"sacaVocales()", "sacaConsonantes()" y
"ordenamiento()". Incluya datos de prueba
BUnit.
3.c) [5 pts]
Especifique la función "cifrador()" que
determina la cantidad de palabras cifradas. Incluya en su
especificación ejemplos BUnit que muestren qué es
una palabra cifrada.
3.d) [3 pts]
Especifique la
función
"cotejador()" que usa los valores de los diccionarios
junto con la cantidad de palabras cifradas para determinar si son
o no iguales.
3.e) [5 pts]
Implemente "cifrador()".
3.f) [5 pts]
Implemente "cotejador()".
3.g) [7 pts]
Use sus funciones para implementar el programa que lee el archivo
"Biblia.txt" y carga los 2 diccionarios.
Adolfo Di Mare <adolfo@di-mare.com>.
|
|
|