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]
Alineados()
sirve para determinar si algún
renglón de una matriz es múltiplo de otro.
1.a) [3 pts]
Declare la clase Matriz
con los
métodos que necesite para implementar
Alineados()
. No olvide declarar los
campos de la clase.
1.b) [2 pts]
Declare la clase Pareja
que contiene los campos
públicos m_1ero
y m_2do
, de
manera que la pareja (2,4)
indica que la cuarta fila
es múltiplo de la segunda.
1.c) [10 pts]
Alineados()
debe retornar un
ArrayList<>
de valores Pareja
para
indicar que el renglón m_1ero
es
múltiplo del renglón m_2do
en la
matriz. Especifique el método público
Matriz.Alineados()
. Incluya ejemplos de uso.
1.d) [18 pts]
Implemente el método Matriz.Alineados()
.
1.e) [0 pts] Diga en qué casos los errores de redondeo pueden hacer que su implementación no funcione. Explique cómo remediar este problema.
2) [33 pts] “
List.vuelveLista(n)
”
2.a) [0 pts]
Haga un diagrama de una lista que contiene los valores
{(a),(b),(c),(d),(e),(f),(g)}
.
2.b) [4 pts]
Especifique
el método “plop()
” para la lista circular doblemente enlazada que traslada
el último valor para que quede de primero, pero sin copiar valores,
referencias a valores o nodos (use cirugía de punteros). Suponga que
está usando la lista con referencia al primer nodo (que es la usada en
los
ejemplos vistos en clase).
2.c) [18 pts]
Implemente
el método “plop()
”. Use
cirugía de punteros (como es un método de la clase,
sí se vale metérsele al
Rep para manipular los campos de
enlace de la lista).
2.d) [11 pts]
Use “plop()
” para implementar el método
“L.vuelveLista(n)
” que toma los últimos
“n
” valores de la lista y los pone de primeros.
L<Character>={(a),(b),(c),(d),(e), (f),(g),(h)} → L.vuelveLista(3) → L<Character>={(f),(g),(h), (a),(b),(c),(d),(e)}
3) [33 pts] En la compañía “VagoSeguro” hicieron una implementación del método estático “
novenario()
” de la clase
“Bib
” sirve para obtener el complemento a 9 de
un número. El problema, por supuesto, es que esa implementación
usa vectores.
3.a) [5 pts]
Haga la especificación
de “novenario()
” usando al menos 4 ejemplos
similares a assertTrue( 123456789==Bib.novenario(876543210)
)
.
3.b) [10 pts]
Implemente
“novenario()
” para números enteros
positivos. Use el truco del 999, que permite obtener 123 usando una
resta a partir del 876.
Recuerde: es prohibido usar vectores.
Recuerde: es prohibido usar hileras.
Use únicamente operaciones aritméticas.
3.c) [18 pts] Escriba otra implementación diferente a la anterior, pero esta vez extraiga cada dígito en lugar de usar el truco del 999. Recuerde: es prohibido usar vectores. Recuerde: es prohibido usar hileras. Use únicamente operaciones aritméticas.
Adolfo Di Mare <adolfo@di-mare.com>.
|