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]
Escriba un programa que lea números y cuente la cantidad de
veces que cada número aparece. Al terminar de leer, su
programa deberá listar cuáles números fueron
leídos junto a la cantidad de veces que cada uno aparece (o
sea, que su programa debe contar la cantidad de repeticiones). Use
la clase Bolsa cuya definición parcial
está en la
Figura 1.
class Bolsa {
public:
int Esta(int i); // # de veces que "i" Está() en la Bolsa
void Agrega(int i); // incrementa "Esta(i)"
// ...
}; // Bolsa
2) [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:
2.a) [7 pts] Explique para qué sirve cada uno de
los campos de
3) [33 pts]
La clase
Además, es posible aumentar la cantidad de elementos del
vector usando el método
3.a) [11 pts] Especifique la clase
4) [33 pts]
Especifique la clase
4.a) [7 pts] Especifique minimalmente la clase
Figura 2
+-------------+ class Matriz {
| /\ /\| enum { DIM = 25 };
| /3 \ / /| char _v[DIM][DIM];
| /2 \ / / | int _n,_m; // dimensiones actuales
|/1 \/ /n | friend class Rebotador;
+-------------+ }; // Matriz
class Rebotador {
int _dir; // '\ /' ./ \.
enum { NO='\\', NE='/' , SO='/', SE='\\' };
int _x, _y;
public:
void Paso(Matriz& M, int& x, int& y, char& ch);
}; // Rebotador
Rebotador.
2.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._v[x][y] = ch;
Suponga que, en cada invocación,
Rebotador::Paso() avanza un paso nada más.
2.c) [19 pts] Implemente Rebotador::Paso().
VectorSube sirve para mantener ordenado un
vector de números reales positivos, con la ventaja
adicional de que la cantidad de elementos del vector puede
incrementarse. Por ejemplo, si el vector "V[]" ya
tiene llenos 6 elementos, y se le agrega el valor
"5", el vector aumenta en uno su tamaño pero
mantiene todos los valores ordenados:
VectorSube::Aumente(),
que lo que hace es poner ceros en las posiciones iniciales del
vector, pues cero es el valor mínimo que puede estar
almacenado en el vector.
VectorSube. También incluya la
especificación de al menos un
constructor.
3.b) [7 pts] Especifique VectorSube::Agregue().
3.c) [8 pts] Implemente VectorSube::Agregue().
3.d) [7 pts] Implemente
VectorSube::Aumente().
Evite invocar VectorSube::Agregue() en su implementación.
Lista, de manera que pueda luego
implementar el método (o función)
Intercale(), para intercalar dos a dos los valores de
dos listas. Por ejemplo, de las listas
"(a, b, c, d, e)" y
"(x, y, z)" se obtendría
"(a, x, b, y, c, z, d, e)".
Su lista debe estar implementada usando
punteros.
Lista.
4.b) [8 pts] Especifique Intercale().
4.c) [18 pts] Implemente Intercale().
Soluciones
Adolfo Di Mare <adolfo@di-mare.com>.
Copyright © 2000
Derechos de autor reservados © 2000
|
|
|