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] Con el fin de trasmitir datos por una línea telefónica vigilada por la policía, en la Compañía Rateros INC han decidido encriptar los datos de manera que cualquiera que escuche la transmisión no puede descifrar el mensaje. Los mensajes son números enteros de cuatro dígitos, y usted tiene que escribir la función que codifica mensajes como sigue: primero remplace cada dígito por (la suma del dígito más siete) módulo 10. Luego, intercambie el primer y tercer dígito, y el cuarto con el segundo.
{ 1234, 4321, ... } ==> { 8901, 1098, ... } ==> { 0189, 9810, ... }
1.a) [13 pts] Especifique la función Encripta(), de
dos parámetros, que codifica los primeros números enteros del vector de enteros
que contiene el mensaje a cifrar.
1.b) [20 pts] Implemente Encripta().
1.c) [0 pts] Especifique e implemente DesEncripta().
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 3.a) [10 pts] Explique cuál es la diferencia entre la hilera vacía
3.b) [5 pts] Especifique la función 3.c) [18 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
recibe como parámetro una hilera que contiene un un número romano y lo convierte
a su valor entero. Su especificación debe ser 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).
strstr() de la biblioteca estándar C++ sirve para encontrar
una subhilera dentro de otra hilera.
"" y el puntero nulo NULL (cero). Use ejemplos en su
respuesta.
strstr().
strstr().
vector, cuya declaración parcial aparece
en la Figura 1.
4.a) [8 pts] Especifique el método
4.b) [25 pts] Implemente
Figura 1
typedef long T; // tipo de valor almacenado en la vector
class vector {
enum { Vdim = 40, VPdim = 30 };
class Pata {
friend class vector;
public:
T _v[VPdim]; // pedazo del vector, de longitud fija VPdim
}; // Pata
public:
void Agregar_Final (size_t); // Agregar elementos al Final
void Agregar_Principio(size_t); // Agregar elementos al principio
private:
size_t _izq_primero; // tamaño del bloque libre a la izquierda
size_t _der_ultimo; // tamaño del bloque libre a la derecha
size_t _der;
Pata * _vp[Vdim]; // vector de punteros hacia las partes ("patas")
}; // vector
vector::Eliminar_Final(size_t).
vector::Eliminar_Final(size_t).
Soluciones
Adolfo Di Mare <adolfo@di-mare.com>.
Copyright © 2000
Derechos de autor reservados © 2000
|
|
|