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