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>.
|