Universidad de Costa Rica
Escuela de Ciencias de la
Computación e Informática
Profesor Adolfo Di Mare
CI-1101
I 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 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)].

 

Soluciones

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