Universidad de Costa Rica
Escuela de Ciencias de la
Computación e Informática
Profesor Adolfo Di Mare
CI-1201
II Semestre 2007
[<=] [home] [<>] [\/] [=>]
CI-1201 Programación II

Examen #1 [solución]

      Duración: Ochenta 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) [50 pts] Los números de punto flotante se almacenan usando 2 valores: la mantisa y un exponente. Por ejemplo, el valor 123,456.78 se almacena como [12345678] exp(6), pues 0.12345678 x 10^6 == 123,456.78. Suponga que ya cuenta con su clase GranNum que permite almacenar números enteros de longituda arbitraria, como en la cuarta tarea. Use su clase GranNum para crear la clase SuperFloat que permite almacenar números de punto flotante no negativos con una cantidad arbitraria de dígitos significativos en la mantisa.

1.a) [15 pts] Especifique el método que sirve alinear 2 super - números antes de sumarlos. Por ejemplo, si A == 12345 exp(25) y B == 6789 exp(30), una forma de ajustar los valores de A y B para que calcen y puedan ser sumados es reescibir el valor de B como 678900000 exp(25), bajándole el exponente 5 y también agregándole 5 ceros, de manera que la suma A+B pueda ser calculada correctamente como 678912345 exp(25). Explique por qué esta operación debe o no ser pública o privada. Recuerde: ¡No se le meta al Rep de GranNum!.

1.b) [5 pts] Implemente el métodoque especificó en el punto anterior.

1.c) [5 pts] Declare el Rep de la clase SuperFloat. Incluya un diagrama o modelo. No es necesario que el exponente sea un GranNum porque con un valor de tipo int alcanza para la mayor parte de las aplicaciones.

      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.d) [25 pts] Especifique e implemente el operador para sumar 2 valores SuperFloat.

 

2) [50 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".

2.a) [8 pts] Escriba el archivo de encabezado "String_Deque.h" que contiene la abstracción y la especificación para la clase "String_Deque", que permite usar hileras implementada con vectores extendibles. Use el operador de suma "+" para concatenar hileras. No olvide incluir el Rep. Use la misma clase deque<> que utilizó en las tareas programadas, pero no se le meta al Rep del vector extendible.

2.b) [8 pts] Especifique e implemente el operador de asignación para la clase "String_Deque".

2.c) [8 pts] Especifique e implemente el constructor de copia para la clase "String_Deque".

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

2.e) [18 pts] Especifique e implemente el operador de concatenación.

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

 

Soluciones

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