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] El método
monoCultivo() se usa emparejado con
poliCultivo() para manipular vectores.
public static void
monoCultivo( int i, int V[], int R[] ) {
if ( i>=V.length ) { return; }
R[i] = V[ V.length-i-1 ];
monoCultivo( i+1,V,R );
return;
}
public static void
poliCultivo(int N) {
int i = 0, mono[] = new int[N];
int j = 0, poli[] = new int[N];
while (i<N) {
j=i+1; mono[i]=j; i=j;
}
monoCultivo( 0, mono, poli );
for (j=0; j<N ; j++) {
System.out.print( poli[j] + " " );
}
}
1.a) [5 pts] Especifique ambos métodos.
1.b) [18 pts]
Muestre los registros de activación que resultan al ejecutar
poliCultivo(1234). Para abreviar, solo muestre los primeros
3 y los últimos 2.
1.c) [10 pts] Explique cómo se puede lograr que estos métodos fallen (sin modificarlos). Muestre los registros de activación y explique por qué se produce la falla.
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]
[2(1)] |
[3(21)] |
[4(37)] |
1 2 3 4 |
21
22 23 24
25 26 27 28 29
|
37
38 39 40
41 42 43 44 45
46 47 48 49 50 51 52
|
3.a) [7 pts]
El método
estático "Piramidoso()" de la clase
"Biblio" recibe dos números e imprime una
pirámide de varios niveles a partir del segundo valor.
Escriba la
especificación completa de
"Piramidoso()".
3.b) [26 pts]
Implemente "Piramidoso()".
En el ejemplo se muestra "Piramidoso()" para los
valores [2(1)], [3(21)] y
[4(37)].
Adolfo Di Mare <adolfo@di-mare.com>.
|
|
|