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>.
|
|
|