Universidad de Costa Rica
Escuela de Ciencias de la
Computación e Informática
Profesor Adolfo Di Mare
CI-1201
I Semestre 2013
[<=] [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 las tres preguntas. ¡No haga más de lo que se le pide!

 

1) [33 pts] El problema principal de las hileras C++ es que es necesario controlar que tienen al final el "EOS" que se representa como "(char)0".

1.a) [6 pts] Escriba el archivo de encabezado "String_List.h" que contiene la abstracción y la especificación para la clase "String_List", que permite usar hileras implementadas como listas. Use el operador de suma "+" para concatenar hileras. No olvide incluir el Rep. Use la misma clase lista que utilizó en las tareas programadas, pero no se le meta al Rep de la lista.

1.b) [6 pts] Especifique e implemente el operador de asignación para la clase "String_List".

1.c) [6 pts] Especifique e implemente el constructor de copia para la clase "String_List".

1.d) [6 pts] Especifique e implemente el operador de asignación desde una hilera C++.

1.e) [9 pts] Especifique e implemente el operador de concatenación.

1.f) [0 pts] Especifique e implemente el convertidor de la clase "String_List" a "(char *)". Explique cómo se debe administrar la memoria dinámica del objeto retornado.

 

2) [33 pts] Suponga que usted está implementando una lista doblemente enlazada similar a la de la biblioteca estándar C++ en la que se usa un nodo centinela.

2.a) [0 pts] Declare el Rep de la lista y de su nodo. Use plantillas.

2.b) [5 pts] Especifique e implemente el método "unoOdos()" que retorna "true" cuando la cantidad de valores almacenados en la lista es "1" o "2". Use dos o menos comparaciones de punteros en su implementación; no use ciclos.

2.c) [6 pts] Especifique e implemente el método "swap()" que recibe un iterador como argumento e intercambia ese nodo con el siguiente. Use cirugía de punteros.

2.d) [11 pts] Utilice únicamente su método "swap()" para especificar e implementar la función "trasladeMayor()"que recibe a una lista y traslada al final el elemento más grande de la lista pero nunca los copia. ¡No se le meta al Rep!

2.e) [11 pts] Suponga que usted cuenta ya con un método "splice(list& L)" que toma el último nodo de la lista "L" y lo pone de primero en la lista "*this". Implemente la función "Burbuja(list& L)" que ordena de menor a mayor los valores almacenados en la lista. En su respuesta utilice únicamente"splice()" o lo que usted ha implementado en el examen. ¡No se le meta al Rep!

 

3) [33 pts] San Mateo estaba un poco aburrido, así que decidió usar sus denarios para contratar a San Marcos. Le dijo que si toma la Biblia y la separa en palabras, ocurre que la cantidad de palabras cifradas en consonantes y en vocales es la misma. Para poder demostrar esta conjetura, en realidad fue San Lucas quien escribió un programa que la resuelve. Este programa usa 2 diccionarios, uno de consonantes "C[]" y otro de vocales "V[]", en los que se depositan todas las palabras. Por ejemplo, de la frase "San Juan escribió el Apocalipsis" salen los siguientes grupos de vocales y consonantes:
V[]: "a ua eiio e aoaii"
C[]: "sn jn scrb l pclpss"

Luego hay que ordenar las letras de las palabras alfabéticamente:
V[]: "a au eiio e aaiio"
C[]: "ns jn bcrs l clppss"

Por último, hay que meter todas las palabras en el diccionario respectivo:
V[]: V["a"]++; V["au"]++; V["eiio"]++; V["e"]++; V["aaiio"]++;
C[]: C["ns"]++; C["jn"]++; C["bcrs"]++; C["l"]++; C["pclpss"]++;

3.a) [0 pts] Declare los diccionarios "C[]" y "V[]" para consonantes y vocales. Explique por qué es adecuado usar "typedef".

3.b) [8 pts] Especifique las funciones "separaPalabras()", "sacaVocales()", "sacaConsonantes()" y "ordenamiento()". Incluya datos de prueba BUnit.

3.c) [5 pts] Especifique la función "cifrador()" que determina la cantidad de palabras cifradas. Incluya en su especificación ejemplos BUnit que muestren qué es una palabra cifrada.

3.d) [3 pts] Especifique la función "cotejador()" que usa los valores de los diccionarios junto con la cantidad de palabras cifradas para determinar si son o no iguales.

3.e) [5 pts] Implemente "cifrador()".

3.f) [5 pts] Implemente "cotejador()".

3.g) [7 pts] Use sus funciones para implementar el programa que lee el archivo "Biblia.txt" y carga los 2 diccionarios.

 

Soluciones

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