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 todas 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 seis dígitos, y usted tiene que escribir la función que codifica mensajes como sigue: primero remplace cada dígito por (la suma del dígito más setenta y ocho) módulo 10. Luego, intercambie el primer y el último dígito, el segundo y el penúltimo, y los dos dígitos del medio.
{ 123456, 654321, ... } ==> { 901234, 432109, ... } ==> { 432109, 901234, ... }
digitos6()
" que a partir de un número entero
retorna un vector que contenga los últimos 6 dígitos
decimales del número aún si el número es negativo.
1.b) [8 pts]
Implemente "digitos6()
".
1.c) [4 pts]
Especifique Encripta()
, de dos parámetros, que
codifica los primeros números enteros del vector de enteros
que contiene el mensaje a cifrar.
1.d) [18 pts] Implemente Encripta()
.
1.e) [0 pts] Especifique e implemente
DesEncripta()
.
2) [33 pts] Un número romano está formado por una secuencia formada con las letras
M-D-C-L-X-V-I
. Cada letra
tiene un valor diferente, desde 1.000
hasta
1
. La regla para traducir un número romano a
un número entero es muy simple: se suma el valor de cada
carácter romano, excepto cuando ocurre que el siguiente
carácter romano es mayor, en cuyo caso lo que se suma es la
diferencia entre los dos:
M = 1.000 VI ==> 6 (5+1) D = 500 IX ==> 9 (10-1) C = 100 LXXXVII ==> 87 (50+10+10+10+5+1+1) L = 50 CCXIX ==> 219 (100+100+10+(10-1)) X = 10 MCCCLIV ==> 1354 (1000+100+100+100+50+(5-1)) V = 5 MCMLVI ==> 1956 (1000+(1000-100)+50+5+1) I = 1 M CM L V I |
2.a) [13 pts]
Especifique en formato
Javadoc
"Romano_INT()
" que recibe como parámetro una
hilera que contiene un número romano y lo convierte a su
valor entero. Su especificación debe ser completa.
2.b) [20 pts]
Implemente "Romano_INT()
".
3) [33 pts] Es más sencillo trabajar con matrices cuadradas.
A B 1 0 0 0 1 2 3 4 2 3 0 0 0 5 6 7 4 5 6 0 0 0 8 9 7 8 9 0 0 0 0 0 |
C D 1 2 3 4 1 1 1 1 2 4 6 8 2 2 2 2 0 0 0 0 3 3 3 3 1 1 1 1 4 5 6 7 |
esTriangular()
" que recibe una matriz cuadrada y
determina si la parte superior o inferior de la diagonal
está compuesta de ceros, por lo que la matriz es triangular
(las matrices A y B son triangulares, aunque una es triangular
superior y la otra es triangular inferior).
3.b) [14 pts]
Implemente "esTriangular()
".
3.c) [4 pts]
Especifique en formato Javadoc "esMultiplo()
", que
trabaja con una matriz cuadrada de enteros y determina si alguna
de sus filas es múltiplo exacto de alguna de las otras de
filas (no se vale usar el número cero como
múltiplo). Para las matrices C y D
"esMultiplo()
" retornará "true
".
3.d) [11 pts]
Implemente "esMultiplo()
".
Adolfo Di Mare <adolfo@di-mare.com>.
|