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

Examen #2 [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] SwapMatrix es una clase matricial que permite intercambiar rápidamente filas y columnas. Además de la operación de acceso SwapMatrix::operator()(i,j) de la matriz, también incluye las operaciones SwapRow() y SwapCol().

1.a) [11 pts] Use vectores indirectos en el Rep para implementar las operaciones SwapRow() y SwapCol(). Haga diagramas para mostrar una matriz antes y después de que la operación para intercambiar filas ha sido aplicada.

1.b) [11 pts] Especifique la operación SwapRow(). Incluya datos de prueba BUnit.

1.c) [11 pts] Implemente SwapRow() y SwapCol().

 

2) [33 pts] La clase matrizSARD (Sumo Arriba Resto Derecha) sirve para almacenar en un vector de dimensión N todos los valores de una matriz cuadrada NxN:
{ 1 0 1 1 }

  ==>  

/  1          \
|  1  0       |
|  2 -1  1    |
\  3 -1  0  1 /

  ==>  

/  1  1  2  3 \
|  1  0 -1 -1 |
|  2 -1  1  0 |
\  3 -1  0  1 /

Para el vector de números { 1 0 1 1 } la parte inferior de la matriz SARD se calcula Sumando el valor de Arriba y Restando el valor de la Derecha. La otra parte se deduce inmediatamente porque la matriz SARD es una matriz simétrica.

2.a) [11 pts] Especifique e implemente la operación matrizSARD::operator()(i,j). Tome en cuenta que el Rep es un vector.

2.b) [11 pts] Especifique e implemente la operación matrizSARD::set() que sirve para cambiar los valores almacenados en la diagonal de la matriz. Incluya datos de prueba BUnit.

2.c) [11 pts] Especifique e implemente la operación matrizSARD::swap(i1,i2) que sirve intercambiar filas y columnas. Incluya datos de prueba BUnit.

 

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] <> [/\]