Universidad de Costa Rica
|
|
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] Considere el siguiente programa “empacado”:
#include<map> // se dice diccionario #include<iostream> class chunga:private std::map<long,long>{public:long Qty(long n) const{std::map<long,long>::const_iterator it;it=this->find(n);if( it==this->end()){return 0;}else{return it->second;}}long operator[](long n)const{return Qty(n);}void inc(long n) {std::map<long,long>::iterator it; it=this->find(n);if( it==this->end()){this->insert(std::map<long,long>::value_type(n,1));} else{(it->second)++;}}};int main(){chunga B;long n;while(std::cin>> n){B.inc(n);std::cout<<" "<<n;}for(n=0;n<32000;++n){if(0!= B[n]){std::cout<<"\nB["<<n<<"]"<<"=="<<B.Qty(n);}}return 0;}
1.a) [0 pts] Justifique cada una de las reglas de indentación usadas en el curso. Discuta si esas reglas son convenciones de programación apropiadas para C++.
1.b) [11 pts] Dele formato a este programa usando las reglas de indentación definidas en el curso.
1.c) [18 pts] Escriba en formato Doxygen la especificación para la clase y cada una de los métodos de este programa. Incluya los datos de prueba BUnit. 1.d) [4 pts] Muestre el resultado de ejecutar este programa si los datos de entrada son1 2 3 3 3 3 3 3 3 3 3 3 3 3 4 5 6 7 8 3 123 123 123
.
Recuerde que std::cin>>n
sirve para leer el siguiente
número entero y luego dejarlo en la variable n
. Explique
por qué se produce ese resultado.
2) [33 pts] Una ventaja de los iteradores Java es que basta una sola variable para recorrer un contenedor.
2.a) [22 pts]
Escriba el
archivo de encabezado para el iterador itrAcum.h
que sirve para recorrer una lista visitando el primer elemento una
vez, el segundo dos, hasta retornar el
n-ésimo n veces. Por ejemplo, si L==(a,b,c)
el iterador retornará a los elementos en el orden (a b b c
c c). Incluya la
especificación de
su
iterador junto con
los datos de prueba
BUnit.h
. En su
respuesta usted debe usar el siguiente
Rep para el iterador:
TYPE Rep_Acum = RECORD c : Lpos_T; { list<>::iterator actual } i : UNSIGNED; { Número del elemento actual } { 0 <= i <= L.size() } countL, { L.size() } k : UNSIGNED; { Veces que se ha retornado } { el i-ésimo elemento } L : ^List_P; { Puntero a la lista que se recorre } END;
2.b) [11 pts] Implemente el iterador.
3) [33 pts] Escriba el programa
LNGST.c++
que lee un archivo y
cuenta la cantidad de líneas que contiene, y que
también indica cuál es la longitud de la
línea más larga del archivo. El formato de salida
del programa es el siguiente:
C:\> lngst <archivo.txt
lines: [max: 3225]
40: 123456789.123456789.123456789.123456789
850: 123456789.123456789.123456789.123456789. >>>
26: El Pacuare está en peligro
Recuerde que un renglón puede ser arbitrariamente grande,
de varios megabytes de longitud. Sin embargo, limítese a
imprimir únicamente los primeros 40 caracteres del
renglón. Cuando el renglón sea más largo,
imprima los símbolos ">>>
" al final.
Adolfo Di Mare <adolfo@di-mare.com>.
|