Universidad de Costa Rica
Escuela de Ciencias de la
Computación e Informática
Profesor Adolfo Di Mare
CI-1101
II 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] 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] Implementenovenario()” 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.

 

Soluciones

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