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]
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
N
xN
:
|
{ 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()
.
Adolfo Di Mare <adolfo@di-mare.com>.
|