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:
M = 1.000 VI ==> 6 (5+1) D = 500 IX ==> 9 (10-1) C = 100 LXXXVII ==> 87 (50+10+10+10+5+1+1) L = 50 CCXIX ==> 219 (100+100+10+(10-1)) X = 10 MCCCLIV ==> 1354 (1000+100+100+100+50+(5-1)) V = 5 MCMLVI ==> 1956 (1000+(1000-100)+50+5+1) I = 1 M CM L V I |
2.a) [13 pts] Especifique la función
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.
2.b) [20 pts] Implemente 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).
3) [33 pts] El problema del año dos mil (Y2K) surge cuando en un programa hay que restar dos fechas escritas con dos dígitos, pues el resultado puede ser un número negativo. Por ejemplo,
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>.
|