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 todas las preguntas. ¡No haga más de lo que se le pide!
1) [33 pts]
1.a) [0 pts] Explique cuál es la diferencia entre un método y una función.
1.b) [6 pts]
Especifique la función "dotSlash()
" que cambia
puntos '.'
por '\'
para la
tercera tarea programada.
Recuerde que esta función no cambia puntos emparejados
"..
". Explique si es necesario que esta
función adquiera los nombres de los archivos con los que
trabaja.
Use el formato
Doxygen e incluya los datos
de prueba
BUnit.
1.c) [6 pts]
Especifique la función "pathExt()
" que separa
la ruta del nombre del archivo para la
tercera tarea programada.
Use el formato
Doxygen e incluya los datos
de prueba
BUnit.
1.d) [6 pts]
Especifique la función "getPaths( set<>& S,
const list<>& L )
" que usa todos los nombres de archivos
que están en la lista "L
" para cargar en el
conjunto "S
" todas las rutas a archivos cuyos nombres
están en la lista "L
". Por ejemplo, para
"X:\DIR\SubDir\nombre.ext"
la rutina
"getPaths()
" le agrega a "S
" estas 3
rutas "{ "X:\" "X:\DIR\" "X:\DIR\SubDir\" }
".
Use el formato
Doxygen e incluya los datos
de prueba
BUnit.
1.e) [15 pts]
Implemente "getPaths()
".
2) [33 pts]
2.a) [0 pts] Explique cuál es la diferencia entre un método y una función.
2.b) [11 pts]
El método
"set<>::insert()
" de la
biblioteca estándar C++ tiene varias formas.
Especifique
una función "insert()
" que le agregue a una
lista el valor siempre y cuando ese valor no esté ya en la
lista. Use el formato
Doxygen e incluya los datos
de prueba
BUnit.
2.c) [11 pts]
Implemente su función "insert()
" para la
lista.
2.d) [11 pts] Modifique su implementación anterior de manera que los valores queden ordenados en la lista cada vez que los inserta. Utilice un objeto función (funtor) para comparar los valores almacenados en la lista.
3) [33 pts] Considere la clase
lista
que cuenta con
las operaciones lista::intercambie(i)
,
lista::pop()
y lista::push(v)
. La
primera intercambia los valores que es encuentran en la
posición
"*i
" y "*(++i)
" de la lista, la segunda
remueve de la lista el primer valor y luego lo retorna y la
tercera agrega un valor al principio de la lista.
3.a) [3 pts]
Especifique lista::intercambie(i)
.
Recuerde usar siempre el formato
Doxygen e incluir los datos
de prueba
BUnit.
3.b) [3 pts]
Especifique lista::push(v)
y lista::pop()
. Use el formato
Doxygen e incluya los datos
de prueba
BUnit.
3.c) [7 pts]
Especifique particion()
que separa una lista en dos
listas, de manera que los valores que quedan en la primera lista
son mayores que el parámetro
"pivote
" de particion()
, y los
de la segunda son los demás valores almacenados en la lista
original. Use el formato
Doxygen e incluya los datos
de prueba
BUnit.
3.d) [20 pts]
Implemente particion()
. Como esta función no
es amiga (friend
) de la clase lista
, al
escribir su implementación use la operaciones
lista::push(v)
y lista::pop()
y alguna
de lista::intercambie(i)
o
lista::isEmpty()
.
Adolfo Di Mare <adolfo@di-mare.com>.
|