ESCUELA DE LAS CIENCIAS DE
PROGRAMACIÓN II (CI-1201)
CENTRO UNIVERSITARIO:
CEDULAS DE
COSTA RICA
PROFESOR:
ADOLFO
DI MARE
01/11/2005
Tabla de contenidos
Descripción del problema a resolver
Especificación
de los métodos:
Entre los costarricenses
existe un gran problema a la hora de escribir un número de cédula, debido a que
las personas no escriben todos los ceros que deben poner. Esto causa un gran inconveniente y
retrazo en los trámites que deben hacerse, ya que uno está acostumbrado a que
el primer dígito de la cédula indica la provincia, luego siguen dos números de
hasta cuatro dígitos, también cuando escriben los números pegados y no se sabe
adónde comienza el primer grupo de números y donde está el segundo.
Para solucionar este problema
se debe implementar un programa que reciba un genera varios números de cédulas
que pueden corresponder al correcto y si se recibe uno de esos números
incorrectos, entonces devolver el correspondiente.
Los documentos de este trabajo, se pueden encontrar en: www.angelfire.com/cantina/colossus y en: www.angelfire.com/rock4/a43354,
documentaciones y archivos de compilación.
Implementar un programa que
reciba varios números de cédula y determine cuáles de ellos pueden corresponder
a la misma cédula. Debe existir un
método que reciba cada número de cédula y genere todas las cédulas que pueden
corresponder a ese número y a la vez otro método que use como entrada los
números generados por el método anterior.
·
Corregir
una pregunta de un examen
·
Lograr
una buena manipulación de strings
·
Usar
la biblioteca STL
·
Profundizar
en el uso del software generador de especificaciones Doxygen.
El programa requiere tener una
plataforma de win32 valida con cualquier sistema operativo de Microsoft
Windows; además de que requiere la existencia de los sub-directorios que se
deseen ordenar.
/**
**/
class CR_CED
/** Este método lee un \carchivo.txt
y lo va analizando hasta que el texto en el documento se termine, sin importar
la longitud de este.
-
Si no
posee direcciones de correo, no imprime nada y sale del archivo.
-
Si hay
líneas en blanco, no las toma en cuenta
-
Hace
llamado al \cExtractor cada vez que haya un correo electrónico y le envía por
parámetros la línea en que lo encontró.
**/
void
leer_archivo()
/** Hace una copia del
renglón que recibe, luego sustituye por asteriscos los caracteres no válidos
para poder conseguir las direcciones con mayor facilidad.
-
Si la
no posee ningún correo sale del método para evaluar al siguiente.
-
Si el
arroba esta en el último caracter no lo toma en cuenta.
-
Si
posee menos de cuatro caracteres, no es válido para una dirección de correo.
bool Extractor(const string &renglon)
/** Recibe la dirección de correo y el renglón
donde esta se encuentra, luego inserta en un diccionario el \cmail y una lista
de renglones
-
Si la
dirección ya esta en el diccionario, hace una copia de la lista que le hace par
e inserta el nuevo renglón.
-
Si no existe hace un nuevo espacio para el
correo y una nueva lista que contenga su línea.
**/
void Insertar(const string &direccion, const
string &renglon)
Éste
programa sirve para extraer direcciones de correo electrónico de un texto y guardar
un registro de cada renglón en el que aparece dicha dirección. Al final,
imprime un mapa con direcciones de correo y listas con renglones. Se
imprime de la siguiente forma:
- Te envié el mensaje al correo cbadillam@yahoo.com pero no me has contestado…
- …cuando me fijé no había escrito
el .com de cbadillam@yahoo.com,
ya yo…
- … cuando el profesor Adolfo (adolfo@di-mare.com) envió el correo, yo estaba
chateando con…
- …<adolfo@di-mare.com>
Mail delivery failure, mailbox full or message is larger than…
Éste
programa es muy eficiente en cuanto no interactúa con el usuario, por lo que no
hay errores posibles a la hora de recibir la información. También reconoce todos los caracteres
aceptados en direcciones de correo electrónico(letras, números y los caracteres
‘-‘,’_’, ‘.’, ‘@’) por lo que no hay manera de que falte alguna dirección. Como
usa las listas que proporciona la biblioteca STL de C++, además usa mapas;
ambos crecen sin parar hasta que la memoria se agota, así que ése es el límite
de pares y de renglones que soporta, y varía de una máquina a otra.
DICCIONARIO
||
\/
. . .
+----------+-----------+
+-------------------+-------------------...
¦ first |
second | <=>
|adolfo@di-mare.com |renglon1|renglon10|...
+----------+-----------+
+-------------------+-------------------...
.
. .
+----------+-----------+
+-------------------+-------------------...
¦ first
| second | <=> |anthonymr@gmail.com|renglon8|renglon2 |...
+----------+-----------+
+-------------------+-------------------...
+----------+-----------+
+-------------------+-------------------...
¦ first
| second | <=> |cbadillam@yahoo.com|renglon3| ...
|...
+----------+-----------+
+-------------------+-------------------...
. . .
+----------+-----------+
+-------------------+-------------------...
¦ first
| second | <=> |zz_zz.z@progra2.com|renglon1| ... |
+----------+-----------+ +-------------------+-------------------...
|| || || ||
\/ \/ \/ \/
string list<string> llave de acceso cada renglonX
representa
un string
El compilador utilizado fue Microsoft
Visual C++ 7.0
La presentación del trabajo permite que el
estudiante simplemente abra el proyecto que se encuentra en el archivo .ZIP y
abra el proyecto para Visual C++, automáticamente se cargan los archivos
necesarios para la compilación y ejecución del programa.
Luego se compila el programa y una vez
hecho esto, estará listo para ser ejecutado.
En nuestro caso,
simplemente se ejecuta el programa y él mismo carga el archivo que va a
utilizar, extrae cada dirección y su respectivo renglón y finalmente imprime el
resultado. Todo lo hace sin solicitar la asistencia del usuario, por lo que no
hay mayores complicaciones.
En esta ocasión no nos fue tan complicada
la realización del trabajo, solo que se nos presentaron igual número de
inconvenientes que la tarea anterior, como lo son los errores de linking. Pero lo mejor de todo fue que ya pudimos
detectar cuales son esos errores que son propios del compilador: el compilar en
la unidad z, hacer un nuevo proyecto jalando archivos que están en otra carpeta,
o hacer llamado a un método que aún que está en las líneas de abajo aunque esté
bien implementado, sabemos que este
último error es algo difícil de encontrar pues en java estábamos acostumbrados
a implementar los métodos en cualquier parte del código sin que esto afectara a
la hora de ejecución.
Sabemos que con
esta tarea se nos facilita el uso de mapas, pues en el libro solo vienen
ejemplos con números y eso no es del todo claro a la hora de trabajar con
objetos; ahora sí podemos decir que podemos usar mapas con objetos para
cualquier tipo de aplicación.
Luego de analizar nuestra documentación
anterior, descubrimos huecos en el programa que no habíamos contemplado, lo que
nos ayudó a aclarar la estructura que el software debía tener. Redefinimos los
métodos mediante una modulación mejor planeada: implementamos métodos para
agregar los renglones y eso aclaró la idea que teníamos del programa. Esperamos generar código eficiente y fácil
de leer, con especificaciones mejor elaboradas y con un profundo sentido de la
simplicidad.
-
Deitel Harvey M., Deitel Paul J. Como programar en C++. Segunda Edición.
Pearson Educación, México, 2003.