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] Implemente “
Collection<>.rotaIzquierdo(int)
”
Suponga que el iterador “C<Character>={(a),(b),(c), (d),(e),(f),(g)} → C.rotaIzquierdo(3) → C<Character>={(d),(e),(f),(g), (a),(b),(c)}
C.iterator()
” de la colección
“C<>
”, caracterizado por sus operaciones
“hasNext()/next()
”,
no solo tiene la operación
“remove()
” que funciona de manera que permite continuar la
iteración a partir del valor que está inmediatamente
después del valor eliminado de la colección sino que, en
contraposición a lo que hace ese método en la biblioteca Java,
el que usted usará retorna la referencia al valor eliminado, la que
posteriormente se puede usar para trasladar ese valor a otro contenedor.
1.a) [0 pts]
Explique por qué tanto
“List<>
”
como“ArrayList<>
” cumplen con la interfaz
“Collection<>
” de la biblioteca Java. Además,
indique cuáles de las operaciones { add(), addAll(), clear(),
contains(), containsAll(), equals(), hashCode(), isEmpty(), iterator(),
remove(), removeAll(), retainAll(), size(), toArray()
} son opcionales.
También, explique por qué una colección Java no puede
contener números enteros, sino que hay que meter cada valor
numérico en una instancia de la clase
“Character
”.
1.b) [6 pts]
Suponga que el valor de la colección es la secuencia
C<Character>=={(d),(e),(f),(g),(a),(b),(c)}
. Como
ejemplo, escriba un bloque de código que use el iterador
“itr
” junto con su operación
“remove()
” para eliminar los valores de
posición impar { (e),(g),(b) }
.
// RELLENE CON SU ALGORTIMO if ( C.size()==7 ) { // RELLENE CON SU ALGORTIMO }
1.c) [11 pts]
Especifique
el método “rotaIzquierdo()
” que sirve para
trasladar un bloque de valores hacia la izquierda. Por ejemplo, si
C<>={(a),(b),(c),(d),(e),(f),(g)}
después de
“C.rotaIzquierdo(c)
” quedaría con
C<>={(d),(e),(f),(g),(a),(b),(c)}
. Incluya ejemplos
“assertTrue()
” en su
especificación.
1.d) [16 pts]
Implemente
“rotaIzquierdo()
”. Debe usar la operación
“remove()
” del iterador de la colección.
1.e) [0 pts]
Implemente “rotaDerecho()
”. Utilice su método
“rotaIzquierdo()
”.
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] El método estático “
flop()
” de la clase
“Bib
” sirve para darle vuelta a los dígitos de
números positivos.
3.a) [5 pts]
Haga la especificación
de “flop()
” usando al menos 4 ejemplos similares a
assertTrue( 12345_678==Bib.flop(3,678_12345) )
.
3.b) [18 pts]
Implemente
“flop()
” para números enteros positivos.
Recuerde: es prohibido usar vectores.
Recuerde: es prohibido usar hileras.
Use únicamente operaciones aritméticas.
3.c) [10 pts]
Use su implementación de “flop()
” para
implementar “flip()
”, que trabaja de forma similar,
pero que trabaja con los dígitos finales en lugar de los iniciales.
Debe utilizar “flop()
” como parte importante de su
solución.
Adolfo Di Mare <adolfo@di-mare.com>.
|