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

Examen #2 [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] La rutina cambiaBase(int b, int n) retorna una hilera Java de tipo String que tiene los dígitos en base "b" del número "n". Por ejemplo, cambiaBase(2,17) retorna la hilera "10001" que es el número 17 escrito en binario, mientras que cambiaBase(5,17) retorna la hilera "32" pues 3*5+2==17.

1.a) [6 pts] Escriba la especificación completa de "cambiaBase()". Incluya ejemplos de uso assertTrue().

1.b) [27 pts] Escriba un programa que encuentre todos los números que son palindrómicos en más de 3 bases, para las bases en el rango [2..16]. Por ejemplo, todos los dígitos decimales son palindrómicos en las bases 10, 11, hasta 16. Cada vez que su programa detecte un nuevo número palindrómico de base múltiple deberá imprimirlo primero en base 10, y luego en las 3 bases en las que es palindrómico. Para evitar que la ejecución de su programa sea infinita, pare cuando ya los números tengan 7 o más dígitos decimales. No hace falta que implemente cambiaBase().

2) [33 pts]
public static long tresXdos(long T, long D) {
    long res = 0;
    if      ( T<0 )  { res = tresXdos(  -T,   D ); }
    else if ( D<0 )  { res = tresXdos(   T,  -D ); }
    else if ( T<D )  { res = tresXdos( 2*T,   D ); }
    else if ( D<T )  { res = tresXdos(   T, 3*D ); }
    else if ( D==T ) { res = T*D; }
    else             { res = 0; }
    return res;
}

2.a) [7 pts] Escriba la especificación de la rutina tresXdos(). Incluya ejemplos de uso “assertTrue()”.

2.b) [11 pts] Dibuje los registros de activación que mostraría Jeliot al ejecutar tresXdos(3,2).

2.c) [7 pts] Encuentre un caso en que esta rutina se encicla recursivamente. Explique porqué ocurre ese fenómeno.

2.d) [8 pts] Implemente de nuevo tresXdos() de manera que también se encicle, en los mismos valores de la versión recursiva de la rutina. No use recursividad para esta nueva implementación.

 

3) [33 pts]

[3(21)] [4(33)] [5(45)]
 21  22
   47
 25  26 
 33     34
   35 36
   37 38
 39     40 
 45      46
   47  48
     99
   51  52
 53      54 

3.a) [7 pts] El método estático "laEquis()" de la clase "Biblio" recibe dos números e imprime una equis de varios niveles a partir del segundo valor. Escriba la especificación completa de "laEquis()".

3.b) [26 pts] Implemente "laEquis()". En el ejemplo se muestra "laEquis()" para los valores [3(21)], [4(33)] y [5(45)].

 

Soluciones

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