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] Haga un programa C++ que lea un archivo y cuente, para cada letra del alfabeto, la cantidad de letras mayúsculas, minúsculas y números e imprima los totales. Recuerde que, en Costa Rica, la pareja "CH" es una letra, y que también el alfabeto incluye a la letra "Ñ". (Sugerencia: use como base las clases que usted implementó en la tarea programada, en cuyo caso únicamente ponga la declaración de la clase y la declaración de los métodos que use en su implementación).
2) [33 pts] Considere la clase
lista
cuyo
modelo (diagrama)
aparece en la
figura de abajo.
2.a) [7 pts] Haga las declaración para la clase
lista
. Incluya en el
Rep apenas lo
suficiente para implementar la operación
lista::K_pase(L, k)
.
2.b) [7 pts]
Especifique la
operación
lista::K_pase(L, k)
, que traslada de la lista
todos los valores que está en una posición
múltiplo de k
, y los deja en la lista
L
. Evite copiar los nodos al trasladarlos de lista.
2.c) [19 pts]
Implemente lista::K_pase(L, k)
.
2.d) [0 pts] Explique qué es la cirugía de punteros.
3) [33 pts] La clase
Rebotador
ha sido creado para que, dentro de
una matriz rectangular [N*M]
, uno de sus elementos
recorra en diagonal las entradas, pero rebotando cuando se alcanza
alguna de las paredes, como se muestra a continuación:
+-------------+ class Matriz { | /\ /\| enum { DIM = 25 }; | /3 \ / /| char m_MAT[DIM][DIM]; | /2 \ / / | int m_N,m_M; // dimensiones actuales |/1 \/ /n | friend class Rebotador; +-------------+ }; // Matriz class Rebotador { int m_dir; // '\ /' ./ \. enum { NO= -1, NE= +1, SO= +2, SE= -2 }; int m_x, m_y; public: void Paso(Matriz& M, int& x, int& y, char& ch); }; // Rebotador |
3.a) [7 pts] Explique para qué sirve cada uno de
los campos del
Rep de
Rebotador
(en el ejemplo se ha comenzado desde la
esquina inferior izquierda).
3.b) [7 pts] Haga la
especificación de Rebotador::Paso()
. Tome
en cuenta que, antes de terminar, Rebotador::Paso()
siempre ejecuta esta instrucción:
M.m_MAT[x][y] = ch;
Suponga que, en cada invocación,
Rebotador::Paso()
avanza un paso nada más.
3.c) [19 pts]
Implemente Rebotador::Paso()
.
4) [33 pts]
4.a) [10 pts] Escriba la declaración de la clase
Binario
que tiene las operaciones aritméticas
básicas para manejar números binarios sin signo. Use
un vector de longitud arbitraria (pero fija) para almacenar los
bits del número binario.
4.b) [5 pts] Especifique opertor+()
para la
clase Binario
.
4.c) [18 pts] Implemente opertor+()
para la
clase Binario
(si lo necesita, cambie el
Rep de su clase
para que le sea más cómodo escribir su
implementación).
Adolfo Di Mare <adolfo@di-mare.com>.
|