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

Examen #1 [solución]

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

 

Soluciones

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