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 Final [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] Para manipular un vector de números conviene usar el método recursivo maxmin(), similar al de la tarea programada, que reacomoda los valores del vector de manera que el valor más pequeño queda de primero y el más grande queda de último.

1.a) [0 pts] Muestre el resultado de aplicar maxmin(V,0,4) al vector { 5,4,3,2,1,0 }. Explique por qué en la última posición del vector V[5] se mantiene el valor en cero y también indique por qué todos los demás valores cambian de posición.

1.b) [22 pts] Escriba una implementación Java recursiva de maxmin(). Incluya documentación interna para explicar cómo funciona su algoritmo cuando el vector es pequeñito.

1.c) [11 pts] Modifique su implementación anterior para obtener otra que, en lugar de solo colocar al menor y mayor en su posición adecuada, también reacomode los demás valores de forma que el vector quede totalmente ordenado.

 

2) [33 pts] Suponga que una palabra es una secuencia contigua de caracteres no blancos, en donde un blanco es aquel caracter para el que el método estático Character.isWhitespace(char) retorna verdadero.

2.a) [13 pts] Especifique partePalabras(), que toma una hilera "str" de palabras separadas por espacios, y retorna un vector o lista de hileras en la que aparecen en secuencia esas palabras (tomadas de la hilera de entrada "str" pero sin blancos). Cada entrada del vector contiene solo 1 palabra. Para mejorar su especificación, incluya ejemplos de uso programados con assertTrue().

2.b) [20 pts] Implemente partePalabras().

 

3) [33 pts] Un "letroso" es una clase que contiene una secuencia de caracteres a la que se le pueden aplicar estas operaciones:
asigne(String str)
Usa la hilera "str" para darle valor al letroso.
cuenta()
Cantidad de letras.
q=soyLetroso(p,n,ch)
Retorna "q" el índice o posición en donde se pueden encontrar "n" letras consecutivas e iguales a "ch", pero con la restricción de que p<=q. Retorna cuenta() si ya no encuentra las "n" letras seguidas.
grabe()
Imprime al letroso.

3.a) [0 pts] Implemente la operación asigne() para la clase letroso y suponga que el valor es almacenado en la lista Java de letras m_Ltr (no use una hilera).

3.b) [11 pts] Especifique soyLetroso(). Para mejorar su especificación, incluya ejemplos de uso programados con assertTrue().

3.c) [11 pts] Implemente soyLetroso().

3.d) [11 pts] Un Letrosario es una hilera en la que soyLetroso() encuentra las letras "ch" consecutivas en posiciones cada vez más altas del índice. Use la clase letroso para implementar el método letroso.esLetrosario(n,ch,STR):
  assertTrue(  esLetrosario( 5, 'A', "..A..AA...AAA...AAAA...AAAAA..." ) );
  assertTrue(  esLetrosario( 3, 'A', "A..AA...AAA..." ) );
  assertFalse( esLetrosario( 2, 'A', "..AA..A.." ) ); // están al revés

 

Soluciones

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