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 las tres preguntas. ¡No haga más de lo que se le pide!
1) [33 pts]
public static long gcd(long m, long n) {
if ( m<0 ) { return gcd(-m,n); }
if ( n<0 ) { return gcd(m,-n); }
if (n==0) { return m; }
else if (m<n) { return gcd(n,m); }
else { return gcd(n,m%n); }
}
1.a) [9 pts]
Escriba la especificación de la rutina gcd() que calcula
el Máximo Común Divisor usando una versión recursiva del
algoritmo de Euclides. Incluya como ejemplos
“assertTrue()” el resultado
de ejecutar tanto gcd(2,3) como gcd(2*3*5 , 2*2*2 *
3*3 * 5*5*5) y gcd(30,9000).
1.b) [12 pts]
Dibuje los registros de activación
que mostraría Jeliot
al ejecutar gcd(2,3).
1.c) [12 pts]
Implemente de nuevo
gcd() de manera que produzca los mismos resultados que la
versión recursiva de la rutina. No use recursividad para esta
nueva implementación.
2) [33 pts] El método
voySubiendo() sirve para determinar el tamaño del
pedazo ascendente de un vector, aún si no está ordenado.
{
{ int V[]= {00,10,20,30,-1}; assertTrue( 4 == voySubiendo( 0, V ) ); }
{ int V[]= {00,10,20,30,30,60,-1}; assertTrue( 3 == voySubiendo( 3, V ) ); }
{ int V[]= {00,-1}; assertTrue( 1 == voySubiendo( 0, V ) ); }
{ int V[]= {00}; assertTrue( 1 == voySubiendo( 0, V ) ); }
{ int V[]= null; assertTrue( 0 == voySubiendo( 0, V ) ); }
}
2.a) [5 pts]
Escriba la especificación de voySubiendo(). No olvide
incluir ejemplos de uso assertTrue() y
assertFalse().
2.b) [11 pts]
Implemente
voySubiendo(). Incluya documentación interna que
explique por qué los índices usados en su algoritmo no se
salen del vector.
2.c) [6 pts]
Escriba la especificación de soyColina() que sirve para
determinar si los valores de un vector primero ascienden y luego
descienden. No olvide incluir ejemplos de uso assertTrue() y
assertFalse().
2.d) [11 pts]
Suponga que usted cuenta ya con la rutina voyBajando():
úsela junto con voySubiendo() para implementar
soyColina().
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)].
Adolfo Di Mare <adolfo@di-mare.com>.
|
|
|