Universidad de Costa Rica
|
|
|
|
|
Duración: dos horas. 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 tres de las cuatro preguntas. ¡No haga más de lo que se le pide!
1) [33 pts]
1.a) [9 pts] En la
Figura 1, indique cuál es el
rango que recorren las variables "i" y
"j".
1.b) [15 pts] Muestre cuál es el resultado de ejecutar este programa. Trate de ser conciso en su respuesta.
1.c) [9 pts] Explique para qué sirve la variable
"ln".
2) [33 pts] Un número romano está formado por una secuencia formada con las letras
M-D-C-L-X-V-I. Cada letra
tiene un valor diferente, desde 1.000 hasta
1. La regla para traducir un número romano a
un número entero es muy simple: se suma el valor de cada
carácter romano, excepto cuando ocurre que el siguiente
carácter romano es mayor, en cuyo caso lo que se suma es la
diferencia entre los dos:
2.a) [13 pts] Especifique la función
2.b) [20 pts] Implemente
Figura 1
M = 1.000 VI ==> 6 (5+1)
D = 500 IX ==> 9 (10-1)
C = 100 LXXXVII ==> 87 (500+10+10+10+5+1+1)
L = 50 CCXIX ==> 219 (100+100+10+(10-1))
X = 10 MCCCLIV ==> 1.354 (1.000+100+100+100+50+(5-1))
V = 5 MDCDLCVI ==> 1.956 (1.000+500+(500-100)+(100-50)+5+1)
I = 1 M D CD LC V I
Romano_INT() que sirve para leer, letra por letra, un
número romano (la lectura termina cuando se lee un espacio
en blanco). Su especificación debe quedar bien completa.
Romano_INT()
(SUGERENCIA: use dos variables, para saber cuál es el
carácter anterior y cuál es el actual;
también puede usar una función que retorne el valor
de cada letra, de acuerdo a la
Figura 1).
10-99 debe interpretarse como 2010-1999,
que debe dar por resultado el número 11. Sin
embargo, el resultado aritmético es incorrecto:
-89 = 10-99.
Al escribir su algoritmo usted debe completar la fecha contenida
en una
instancia de la
clase y2k, anteponiendo los dígitos
19 para los años 1900, o
20 para los años 2000. La
constante y2k::Corte es el año a partir del
cual en su clase se antepone a la pareja de dígitos
19, y para los años anteriores se antepone
20. Por ejemplo, si el valor y2k::Corte
es 60, el valor 60 representa el
año 1960, el 61 representa
1961, pero el valor 59 representa el
año 2059 y 00 representa el
año 2000.
3.a) [13 pts] Especifique el método
y2k::Resta(). No olvide definir los
parámetros.
3.b) [20 pts] Implemente y2k::Resta(). En
su implementación use la declaración de la clase
y2k que está en la
Figura 3.
4) [33 pts] Considere esta implementación del
operador >> para la clase
racional que
usted utilizó en la
Tarea #6.
4.a) [8 pts] Dé un ejemplo en que este operador no funciona correctamente. Explique cuál es el problema.
4.a) [25 pts] Corrija esta implementación.
Adolfo Di Mare <adolfo@di-mare.com>.
|
|
|