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

Examen Final [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 las tres preguntas. ¡No haga más de lo que se le pide!

 

1) [33 pts] Implemente “Collection<>.rotaIzquierdo(int)
C<Character>={(a),(b),(c),    (d),(e),(f),(g)}
→ C.rotaIzquierdo(3) →
C<Character>={(d),(e),(f),(g),    (a),(b),(c)}
Suponga que el iteradorC.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] ImplementerotaIzquierdo()”. 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] Implementeflop()” 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.

 

Soluciones

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