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 #2 [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] 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 son 1 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.

 

Soluciones

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