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 #3 [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 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, ... }
1.a) [3 pts] Especifique en formato Javadoc "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

3.a) [4 pts] Especifique en formato Javadoc "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()".

 

Soluciones

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