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

Examen Final [solución]

      Duración: Dos horas. 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 tres de las preguntas. ¡No haga más de lo que se le pide!

 

1) [33 pts] Con el fin de trasmitir datos por una línea telefónica vigilada por la policía, en la Compañía Rateros INC han decidido encriptar los datos de manera que cualquiera que escuche la transmisión no puede descifrar el mensaje. Los mensajes son números enteros de varios dígitos.
Saca( 6543210 , 3,2)  → 32        volvedor( 1234567 , 1 ) →  1234567
Saca( 6543210 , 5,4)  → 5432      volvedor( 1234567 , 2 ) →  10325476
Saca( 6543210 , 3,4)  → 3210      volvedor( 1234567 , 3 ) → 100432765

Saca( 1234567 , 2,3)  → 567
Saca( 1234567 , 2,4)  → Error - Inválido
1.a) [11 pts] Especifique en formato Javadoc e implemente volvedor( n, k ) que vuelve los dígitos del número "n" en grupos de "k" dígitos, de derecha a izquierda. En su implementación, no use hileras ni vectores: trabaje directamente con los números.

1.b) [11 pts] Especifique en formato Javadoc e implemente saca( n, i, k ) que al número "n" le saca "k" dígitos comenzando en la posición "i" (que corresponde al dígito 10^i). En su implementación, no use hileras ni vectores: trabaje directamente con los números.

1.c) [11 pts] Con base en esos métodos especifique e implemente encripta( k, vec[] ) que encripta todos los números enteros almacenados en el vector "vec[]" volviéndolos en grupos de "k" dígitos. No use un vector adicional en su implementación.

 

2) [33 pts] Implemente la clase "List.Palindromo" que sirve para iterar sobre los valores de una lista. En cada iteración, el valor retornado por "next()" es el siguiente valor de adelante y atrás de la lista, pero en el momento en que los 2 no coincidan termina la iteración y "hasNext()" retorna "false".
( 1 2 3 4 5    7 6    5 4 3 2 1 ) → Retorna 1 2 3 4 5
( 1 2 3 4 5    6 6    5 4 3 2 1 ) → Retorna 1 2 3 4 5 6
( 0 2 3 4 5    6 6    5 4 3 2 1 ) → No retorna valor alguno pues 0!=1

 

3) [33 pts] Mientras que en una "sub-hilera" todas las letras deben aparecer juntas y en su orden, en una "sub-secuencia" aparecen algunas letras aunque no necesariamente aparecen todas. Por ejemplo la hilera "..1...2..3...4....5" tiene como sub-hilera a "2..3" y "12345" es una sub-secuencia que no es sub-hilera. La hilera nula "" siempre es sub-hilera y sub-secuencia de cualquier hilera.

3.a) [5 pts] Explique cómo se puede implementar el método estático esSubHilera() que determina si una hilera es o no sub- hilera de la otra.

3.b) [8 pts] Suponga que usted ha almacenado en vectores de letras los valores que componen 2 hileras. Especifique en formato Javadoc el método estático esSecuencia() que determina si una hilera es o no sub-secuencia de la otra.

3.c) [20 pts] Implemente esSecuencia().

 

4) [33 pts]

[2] [3] [4]
 1
 2 3 
 1
 2 4
 3 5 6 
 1
 2 5
 3 6 8
 4 7 9 10 

4.a) [7 pts] El método estático "Escalereado()" de la clase "Biblio" recibe un número e imprime una escalera descendente de valores hasta el valor que corresponde al número, de manera que la base tenga relación con el valor de entrada. Escriba la especificación completa de "Escalereado()".

4.b) [26 pts] Implemente "Escalereado()".

 

 

Soluciones

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