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 #1 [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 la operación para racionales Exp(x,y), que calcula el valor de "x" elevado a la potencia "y", en donde "y" es un número entero.

1.a) [7 pts] Declare la operación Exp(x,y).

      Recuerde que la diferencia entre "definir" y "declarar" un objeto en C++ es que las declaraciones se ponen en los archivos de encabezados <*.h> y <*.hpp>, mientras que las definiciones están en los archivos de implementación <*.c> y <*.cpp>.
  • Las declaraciones corresponden a la especificación.
  • Las definiciones corresponden a la implementación. Para facilitarle memorizar este hecho, asocie la palabra "definición" con la directiva #define que sirve para implementar macros en C++:
          #define max(a,b) ( (a)>(b) ? (a) : (b) )

1.b) [16 pts] Implemente Exp(x,y). Debe accesar el Rep de la clase para asegurar que su implementación es eficiente.

1.c) [4 pts] ¿Porqué debe o no invocar a rational::simplify() en la implementación de Exp(x,y)?

1.d) [7 pts] ¿Qué desventajas tiene que la función Exp() sea un miembro de la clase rational?

 

2) [33 pts] El "candado" es un juego que consiste en rotar las columans de una matriz 1, 2, 3, etc veces, de izquierda a derecha.
1 a V      2 c Y
2 b W ==\  3 d Z
3 c X    > 4 e V
4 d Y ==/  5 a W
5 e Z      1 b X

2.a) [11 pts] Especifique a función rotaCol() que sirve para rotar los valores de una columna en una matriz. Use el formato Doxygen e incluya los datos de prueba BUnit.

2.b) [11 pts] Especifique la función candado() para matrices. Use el formato Doxygen e incluya los datos de prueba BUnit.

2.c) [11 pts] Implemente candado().

 

3) [33 pts] Una Escalera es un contendor que en cada posición contiene un valor adicional a la cantidad de valores almacenados en la posición anterior. Por ejemplo, si la escalera contiene letras, al construir la escalera a partir de la hilera "ijos4", el valor almacenado sería este:
[0] i
[1] jj
[2] ooo
[3] ssss
[4] 44444

3.a) [7 pts] Diseñe el contenedor Escalera. Escriba la declaración del Rep. Use plantillas.

3.b) [7 pts] Implemente el constructor que recibe un vector de objetos. Recuerde que todos los valores de un peldaño son iguales.

3.c) [3 pts] Implemente el constructor de copia para la Escalera.

3.d) [3 pts] Especifique e implemente la operación push_front() para la Escalera. Use el formato Doxygen e incluya los datos de prueba BUnit.

3.e) [3 pts] Especifique e implemente la operación pop_back() para la Escalera. Use el formato Doxygen e incluya los datos de prueba BUnit.

3.f) [10 pts] La operación valid(i,j) retorna un puntero al valor almacenado en el peldaño "i" de la escalera, siempre y cuando "j" no se salga de la cantidad de valores almacenados en la escalera. De otra manera, valid() retorna el puntero nulo (0). Especifique e implemente valid(). Use el formato Doxygen e incluya los datos de prueba BUnit.

 

Soluciones

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