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

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

 

1) [33 pts] Implemente un programa completo que lea de un archivo un conjunto de palabras clave, todas escritas en letras minúsculas. El segundo argumento de su programa es un archivo lleno de renglones en los que usted buscará las palabras mencionadas en el archivo de palabras clave (ignore las diferencias entre minúsculas y mayúsculas). Después de examinar cada renglón, su programa debe imprimir, para cada palabra clave, todos los renglones del segundo archivo en donde esa palabra aparece. Evite leer más de una vez cualquiera de los archivos. Use los contenedores adecuados que le permitan lograr buena eficiencia en tiempo de ejecución.

 

2) [33 pts] Un polinomio se puede implementar usando un vector de números reales que contiene, en su entrada "i", el coeficiente del i-ésimo término del polinomio. El campo "m_grad" del Rep indica el grado del polinomio. Los términos superiores a "m_grad" no están inicializados en cero. El polinomio cero se representa con un cero en el coeficiente y con el grado() = 0. Por ejemplo, el polinomio x^3 + 2x^2 se ve así:

  polinomio               grado
   2x^2 + x^3               3

    0   1   2   3   4   5   6   7   8   9  ....
  +---+---+---+---+---+---+---+---+---+---+---+---+---+---+
  | 0 | 0 |2.0|1.0| $ | ! | % | % | % | ( | = |   |   |   |
  +---+---+---+---+---+---+---+---+---+---+---+---+---+---+
                ^
                |
                +------------- grado() == 3

2.a) [6 pts] Haga la declaración de las clases poli_VEC y poli_DEQUE usando dos tipos diferentes de vector en el Rep: un vector y la clase std::deque<> de la biblioteca STL de C++. Escriba declaraciones resumidas, incluyendo apenas lo suficiente.

2.b) [6 pts] Especifique el método fromString() que toma una hilera de la forma "x^3 + 2x^2" y produce un polinomio. Luego especifique el operador suma para polinomios. Recuerde incluir suficientes ejemplos BUnit.

2.c) [16 pts] Implemente el operador suma para polinomios. Su implementación debe estar hecha de manera que sirva para cualquiera de las dos escogencias del Rep (tenga cuidado cuando el resultado es cero).

2.d) [5 pts] Explique por qué su implementación del operador suma es independiente del Rep de su clase poli.

2.e) [0 pts] Explique cómo declarar la clase poli de manera que quien la use pueda escoger si usar un vector o un deque para los coeficientes del polinomio. Además, indique cómo generalizar esta solución para usar en la implementación el diccionario std::map<> de la biblioteca estándar.

 

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

3.a) [0 pts] Implemente operator=( const char* ) para la clase letroso. (No se le meta al Rep).

3.b) [11 pts] Especifique soyLetroso(). Use ejemplos BUnit.

3.c) [11 pts] Defina el Rep para la clase. 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 esLetrosario(n,ch,STR). No se le meta al Rep de letroso:
  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 © 2014
Derechos de autor reservados © 2014
[home] <> [/\]