Universidad de Costa Rica
|
|
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> .
|
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.
Adolfo Di Mare <adolfo@di-mare.com>.
|