Universidad de Costa Rica
Escuela de Ciencias de la
Computación e Informática
Profesor Adolfo Di Mare
CI-1201
II Semestre 2006
[<=] [home] [<>] [\/] [=>]
CI-1201 Programación II

Examen #2 [solución]

      Duración: ochenta 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 todas las preguntas. ¡No haga más de lo que se le pide!

 

1) [33 pts] La clase "Primo" es una clase que sirve para obtener números primos, esto es, números enteros que son divisibles únicamente por ellos mismos y por uno. El método más importante de la clase se llama "EsPrimo()" que determina si el valor almacenado es o no un número primo.

1.a) [0 pts] Explique qué significa que el campo de una clase es estático, declarado con la palabra reservada "static".

1.b) [5 pts] Su clase "Primo" debe recordar en un vector estático interno todos los números primos menores al valor actualmente almacenado, de manera que al cambiarle el valor a la clase no sea necesario calcular de nuevos todos los números primos anteriores. Permita que en ese vector sea posible almacenar varios cientos de valores. Declare el Rep de esta clase "Primo" y dibuje el modelo; incluya el Rep si ya calculó los números primos menores a 20.

1.c) [5 pts] Especifique e implemente "EsPrimo()".

1.d) [18 pts] Implemente la función booleana "check_ok(nP)" que verifica la invariante de la clase "Primo".

1.e) [5 pts] Especifique e implemente el método "val()" que permite obtener el número almacenado en el Rep.

1.f) [0 pts] Reprograme "val()" como un operador de conversión de la clase.

 

2) [33 pts] Es una verdad bien conocida que los autores del Código Da Vinci descubrieron frases secretas codificadas en la Biblia. Usted creará una biblioteca que permita encontrar esas frases.

void Bunga(char*s){
int i=0;int j=i;while(s[i]!=0){
if(isalpha
(s[i])){s[j]=s[i];j++;}i++;}s[j]=0;}

2.a) [8 pts] Corrija el espaciado y la indentación de la función "Bunga()". Luego escriba la documentación interna y su especificación.

2.b) [7 pts] Implemente de nuevo "Bunga()" eliminando las variables "i" y "j" y usando únicamente aritmética de punteros.

2.c) [6 pts] Especifique la función "Bomba(s,b)" que busca la hilera "b" dentro de la hilera "s" aún si las letras de "b" no aparecen consecutivas o están desordenadas dentro de "s". Por ejemplo, si "s" es la hilera "aaaaBiiiiOiiOOuuuuMM" su función "Bomba(s,b)" retornaría "true" para la hilera "b == BOOOMM". Además, también retornaría "true" para "BMMOOO" porque "Bomba(s,b)" internamente ordena las letras para encontrar las similitudes ocultas por el desorden. Haga su mejor esfuerzo para que su especificación sea correcta, completa y clara.

2.d) [12 pts] Implemente "Bomba(s,b)".

2.d) [0 pts] Explique cómo usar estas 2 funciones para encontrar los mensajes secretos ocultos en la Biblia.

 

Soluciones

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