Site hosted by Angelfire.com: Build your free website today!

UNIVERSIDAD DE COSTA RICA

 

 

ESCUELA DE LAS CIENCIAS DE LA COMPUTACIÓN E INFORMÁTICA

(ECCI)

 

 

PROGRAMACIÓN II (CI-1201)

 

 

CENTRO UNIVERSITARIO:

SEDE CENTRAL RODRIGO FACIO

 

 

TAREA #7

 

CEDULAS DE COSTA RICA

 

 

GRUPO: 01

 

 

PROFESOR:

ADOLFO DI MARE

 

 

ESTUDIANTES:

CARLOS BADILLA MEJÍA

JORGE A. MENOCAL ROJAS

 

 

CARNÉ:

A40617

A43354

 

 

01/11/2005

 

 

Tabla de contenidos

 

 

 

Introducción.. 1

Descripción del problema a resolver. 1

Planteo: 1

Objetivos: 1

Requerimientos: 2

Abstracción.. 2

Especificación de las clases: 2

Clase CR_CED: 2

Especificación de los métodos: 2

Método de CR_CED::Genera(): 2

Método CR_CED::Lee_ced(): 2

Método CR_CED::Recibe_ced(): 3

Especificación del programa. 3

Eficiencia: 4

Arquitectura del Programa: 4

Implementación.. 4

Compilador usado: 5

¿Cómo compilar el programa?. 5

Guía de uso del programa. 5

Conclusiones. 5

Bibliografía. 6

 

 

                                                      

 

 

 

 

Introducción

 

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.

 

 

Descripción del problema a resolver

 

 

Planteo:

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.

 

Objetivos:  

·        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.

 

 

Requerimientos:   

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.

 

 

Abstracción

Especificación de las clases:

 

         Clase CR_CED:

/**

 

 

**/

class CR_CED

 

 

 

Especificación de los métodos:

 

            Método de CR_CED::Genera():

 

/** 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()

 

 

            Método CR_CED::Lee_ced():

 

/**     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)

 

            Método CR_CED::Recibe_ced():

 

/**     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)

 

 

Especificación del programa

 

É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:

 

cbadillam@yahoo.com:    

- 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…

adolfo@di-mare.com:

- … 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…

 

 

Eficiencia:

 

É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.

 

 

Arquitectura del Programa:

 

 

                                                                          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

 

 

 

Implementación

 

Compilador usado:

 

El compilador utilizado fue Microsoft Visual C++ 7.0

 

 

 

¿Cómo compilar el programa?

 

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.

 

Guía de uso del programa

 

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.

 

 

Conclusiones

 

            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.

 

 

 

Bibliografía

 

-         Deitel Harvey M., Deitel Paul J. Como programar en C++. Segunda Edición. Pearson Educación, México, 2003. *