Página principal   Lista alfabética   Lista de componentes   Lista de archivos   Miembros de las clases   Archivos de los miembros   Páginas relacionadas  

Programación en C++ (Practicas de Est. Datos)

Introducción

En estas páginas se encuentra la documentación de los fuentes así como los puntos que deberá resolver.

Esta página describe la sesión de practicas a realizar por el alumno sobre el ordenador en un tiempo aproximado de una hora. Para realizarla correctamente, deberá seguir el orden que se indica en las siguientes secciones.

Sesión 1: Comienzo y Punteros.

Después de esta práctica, el alumno deberá estar familiarizado con la compilación de programas, el uso de punteros y algunas herramientas básicas para el resto de la asignatura.

Los ficheros fuente se deberán descargar desde

Para llevarla a cabo, debe estudiar y resolver distintos puntos que se encuentran especificados en los archivos fuente. El orden es:

  1. comenzamos.cpp
  2. assert.cpp
  3. salimos_vector.cpp
  4. encadenar.cpp

Sesión 2: Funciones.

Después de esta práctica, el alumno deberá estar familiarizado con la compilación y el diseño de funciones.

Los ficheros fuente se deberán descargar desde

Para llevarla a cabo, debe estudiar y resolver distintos puntos que se encuentran especificados en los archivos fuente. El orden es:

  1. global_static.cpp
  2. cuasi_primitiva.cpp
  3. devolver_referencia.cpp
  4. punteros_referencias.cpp

Sesión 3: T.D.A. I: Representaciones en memoria dinámica.

Después de esta práctica, el alumno deberá estar familiarizado con la idea de que un tipo de dato puede tener múltiples implementaciones, y que la solución de problemas en base a este tipo de dato debería de realizarse de forma independientemente a ellas.

El problema consiste en desarrollar un programa para trabajar con matrices bidimensionales. El programa debe

donde la t denota la matriz traspuesta y las sumas y productos se entienden con el sentido habitual en algebra matricial.

Además, se deberá de resolver usando cuatro representaciones distintas:

  1. Representación en base a un vector. Las filas de la matriz se almacenan, por filas, en un único vector.
  2. Representación en base a un vector de punteros a vectores. Se mantiene un vector con tantos punteros como filas. Cada puntero apunta a un vector con tantos elementos como columnas.
  3. Representación en base a un vector de punteros a un vector. Se mantiene un vector con tantos punteros como filas. Cada puntero apunta a la posición de su fila correspondiente, dentro de un vector que almacena las filas de forma consecutiva.
  4. Representación en base a celdas enlazadas, con punteros a vectores. Se mantienen tantas celdas enlazadas como filas. Cada una almacena un puntero que apunta a un vector con tantos elementos como columnas.
Los objetivos de la práctica son

Cada grupo de trabajo debe resolver

  1. Debe estudiar detenidamente las distintas formas de implementación. De esa forma, plantear un buen diseño antes de comenzar a escribir código.
  2. Debe implementar los 4 programas.
  3. Debe testearlos con varios ejemplos para comprobar que obtienen el mismo resultado.
  4. Se debe entregar en papel el listado de todos los fuentes, precedido por una pequeña introducción que explique el diseño de la solución. Opcionalmente se puede entregar la implementación por correo electrónico al profesor con el "asunto" del mensaje como "Código Sesión 3(nombre alumno)" donde el nombre del alumno es un nombre de cualquiera de los componentes del grupo.
El formato de entrega de la práctica consiste en utilizar un sobre tamaño folio e introducir la práctica en su interior. En el sobre se deberá de escribir los nombres de los alumnos, el grupo, el nombre de la práctica y las direcciones de correo de los alumnos.

Es importante tener en cuenta que este formato es con la intención de tener que evitar el gasto económico de las encuadernaciones y el gasto ecológico de los plasticos y demás que se producen. Por tanto, incluir la práctica en este sobre se refiere a incluir los folios, incluso sueltos. Por supuesto, no incluir la práctica encuadernada.

La fecha de entrega límite para esta práctica es el día 7 de abril de 2003.

Sesión 4: T.D.A. II: Modificación de una biblioteca.

Después de esta práctica, el alumno deberá estar familiarizado con la abstracción y el encapsulamiento de los tipos de datos abstractos, así como las ventajas de un buen diseño para el mantenimiento del software.

Los ficheros fuente se deberán descargar desde

http://decsai.ugr.es/~agarrido/ed2003/practicas/codigos/polinomio.zip

El alumno debe descargar los archivos que implementan el TDA polinomio que se ha visto en las clases de teoría. La implementación es una matriz de flotantes que almacena en la posición i-ésima el coeficiente de grado i-ésimo. Se incluyen varios programas basados en ese TDA.

El supuesto es que esa biblioteca se pasó a los usuarios para que se empezara a explotar. Algunos de sus programas se incluyen en los fuentes (son los programas ejemplo). Se desea realizar una actualización de la biblioteca para resolver los problemas de espacio que se generan, ya que los polinomios con un grado muy alto requieren demasiado espacio. Se decide, por tanto, una nueva representación que debe ser incluida en la nueva versión. Lógicamente, los programas de los usuarios deben seguir siendo válidos, es decir, nuestra nueva versión debe ser compatible con el software que ya existe.

Los objetivos de la práctica son

El alumno debe resolver

  1. Estudiar detenidamente el código.
  2. Modificar la implementación del TDA. En la nueva implementación, se almacenarán parejas (grado,coeficiente) en lugar de los coeficientes. Así, la nueva implementación podrá almacenar polinomios de grado muy alto en menos espacio.
  3. Debe compilar los programas ejemplo, que no han sido modificados, con su nuevo TDA de forma que los resultados sean los mismos.
  4. Se debe entregar en papel la nueva implementación, junto con la nueva documentación interna (función de abstracción e invariante de la representación). Opcionalmente se puede entregar un disco con la implementación o mandarla por correo electrónico al profesor con el asunto del correo "Codigo Sesión 4 (nombre alumno)".
Nótese que la especificación del TDA no se debe entregar porque es la misma que la anterior. El único detalle que se debe tener en cuenta en la especificación del TDA es que la función de creación mantiene un parámetro únicamente por compatibilidad.

El formato de entrega de la práctica consiste en utilizar un sobre tamaño folio e introducir la práctica en su interior. En el sobre se deberá de escribir los nombres de los alumnos, el grupo, el nombre de la práctica y las direcciones de correo de los alumnos.

Es importante tener en cuenta que este formato es con la intención de tener que evitar el gasto económico de las encuadernaciones y el gasto ecológico de los plasticos y demás que se producen. Por tanto, incluir la práctica en este sobre se refiere a incluir los folios, incluso sueltos. Por supuesto, no incluir la práctica encuadernada.

La fecha de entrega límite para esta práctica es el día 23 de abril de 2003.

Sesión 5: Tipos de datos abstractos en C++.

Después de esta práctica el alumno debe estar familiarizado con el desarrollo de TDAs a través de clases en C++.

Los objetivos de la práctica son

El alumno debe resolver:

  1. Crear una nueva clase Racional que, entre otras, incluya las operaciones
  2. Crear una nueva clase Matriz que,entre otras, incluya las operaciones
  3. Crear una nueva clase Polinomio que incluya todas las operaciones de la práctica anterior, incluyendo
  4. Compilar y depurar los módulos.
  5. Documentar los TDAs. Más adelante, el lector puede pinchar en los fuentes del tipo Vector_Disperso donde encontrar un ejemplo de documentación con doxygen. Note que esta documentación incluye
  6. Programar 3 ejemplos para probar los módulos que se han desarrollado. Los tres ejemplos resolverán
    1. Solución de una ecuación de primer grado sobre los números racionales. El usuario debe introducir en cin dos valores racionales a,b que corresponden a una ecuación ax+b=0. Después de comprobar que el primero no es nulo, deberá escribir la solución en pantalla.
    2. Suma, resta y multiplicación de dos matrices. El usuario introduce dos matrices a,b desde cin, y el programa calcula y escribe en pantalla los resultados de las expresiones (a+b), (a-b), .
    3. Derivada de un polinomio. El usuario introduce un polinomio en cin y el programa calcula su derivada y la escribe en pantalla.
Las restricciones a tener en cuenta para el desarrollo de la práctica son:

  1. La implementación del TDA Matriz se realizará en base a un vector de punteros a un único vector.
  2. La implementación del TDA Polinomio, debe usar el tipo Vector_Disperso. Nótese que un polinomio se puede representar en un vector disperso donde el valor por defecto sea el 0.0. De forma que sólo es necesario mantener las parejas de los monomios con coeficiente no nulo. Para ello, se pueden obtener los fuentes del TDA Vector_Disperso desde
  3. Los TDA se implementarán en archivos independientes, se forma que existirán 3 ficheros cabecera (uno para cada tipo) que se usarán en los ejemplos a desarrollar. Por otro lado, se deberá crear un fichero de biblioteca, denominado libmatematicas.a, de forma que la compilación de los ejemplos se realice con el enlazado de esta biblioteca.
Finalmente, como ayuda a algunos alumnos que no han usado el doxygen y me habéis preguntado la forma de utilizarlo, podéis descargar un fichero de configuración desde

La forma de utilizarlo es la siguiente:

  1. Situar ese fichero en el directorio de donde van a "colgar" el proyecto que váis a desarrollar. Por ejemplo, podemos suponer que está en un directorio, donde existen dos directorios
    1. fuentes: donde están todos los fuentes de la práctica
    2. documentacion: donde se obtendrá la salida de doxygen.
  2. Cambiar el valor de OUTPUT_DIRECTORY del fichero Doxyfile para indicar que la salida se obtendrá en el directorio documentacion. El el fichero que os he pasado, tiene el valor ./salida_doxygen.
  3. Cambiar el valor de INPUT del fichero Doxyfile para indicar donde están los fuentes a procesar. En el fichero que os paso están en ./sources. Para nuestro ejemplo, debéis poner fuentes. Notad que en la línea anterior, del fichero ejemplo, he puesto un ejemplo comentado donde se especifican dos directorios donde buscar fuentes.
  4. Otro directorio que puede resultar de interés puede ser EXAMPLE_PATH, que se usa en el caso de que indiquéis en formato doxyfile que incluís algún ejemplo (comando ejemplo). Si no lo usáis no es necesario.
  5. Ejecutar doxygen en el directorio actual, donde está en fichero Doxyfile. Despues de ejecutarse, encontraréis un directorio html en el de salida donde podéis ver el resultado de la documentación en html.
Por último, indicar que en la configuración que os he pasado está activada la generación de html. Pero está desactivada la generación de otros formatos (man, latex, rtf). Esto puede ser tentador para generar otro tipo de documentación, incluso obtener en papel una cantidad muy grande de páginas que documentan nuestros programas. Obviamente, yo no quiero que me entreguéis todo esto . Si me entregáis los fuentes, donde se incluyen los comentarios doxygen, no es necesario que volvais a entregar los mismos comentarios con otro formato.

Concretamente, se debe entregar

  1. En papel, la implementación, junto con la documentación (tanto la pública, es decir, la especificación, como la interna, es decir, función de abstracción e invariante de la representación).
  2. Un disco con todos los fuentes o mandarlos por correo electrónico al profesor con el "asunto" del correo "Codigo Sesión 5 (nombre alumno)". En los fuentes se debe incluir un fichero makefile para compilar los programas con la simple escritura de make
El formato de entrega de la práctica consiste en utilizar un sobre tamaño folio e introducir la práctica en su interior. En el sobre se deberá de escribir los nombres de los alumnos, el grupo, el nombre de la práctica y las direcciones de correo de los alumnos.

Es importante tener en cuenta que este formato es con la intención de tener que evitar el gasto económico de las encuadernaciones y el gasto ecológico de los plasticos y demás que se producen. Por tanto, incluir la práctica en este sobre se refiere a incluir los folios, incluso sueltos. Por supuesto, no incluir la práctica encuadernada.

La fecha de entrega límite para esta práctica es el día 12 de Mayo de 2003.

Sesión 6: Abstracción y estructuras de datos lineales.

Después de esta práctica el alumno debe conocer la abstracción de una posición en un tipo, el concepto de iterar sobre los elementos de un contenedor y las estructuras lineales fundamentales.

Los objetivos de la práctica son

El alumno debe resolver:

  1. Decargar los archivos que implementan el tipo Conjunto_Reales desde
  2. Crear una nueva clase Posicion que implemente el concepto de una posición en un conjunto. En un conjunto de tamaño n podrá tener n+1 valores, desde el primer elemento hasta el siguiente al último. Deberá disponer de funciones miembro para
  3. Modificar la clase Conjunto_Reales
  4. Realizar un programa que realice
    1. Lea un conjunto A de valores int hasta que se introduzca el cero.
    2. Lea un conjunto B de valores int hasta que se introduzca el cero.
    3. Calcule la unión, intersección y diferencia de los dos conjuntos.
    4. Liste los tres conjuntos resultantes.
  5. Modificar la implementación del tipo Conjunto para que utilice una representación basada en un celdas doblemente enlazadas con cabecera.
  6. Comprobar que el programa que se realizó sigue siendo válido.
Concretamente, se debe entregar

  1. La implementación, que incluye
    1. Archivos .h y .cpp con los fuentes resultado de modificar Conjunto_Reales para trabajar con posiciones (El tipo Conjunto que se ha implementado con posiciones).
    2. Archivos .h y .cpp con los fuentes resultado de modificar Conjunto_Reales para trabajar con una representación de celdas(El tipo Conjunto que se ha implementado con posiciones).
    3. Archivo .cpp con el programa de prueba.
  2. Un disco con todos los fuentes o mandarlos por correo electrónico al profesor con el "asunto" del correo "Codigo Sesión 6 (nombre alumno)".
El formato de entrega de la práctica consiste en utilizar un sobre tamaño folio e introducir la práctica en su interior. En el sobre se deberá de escribir los nombres de los alumnos, el grupo, el nombre de la práctica y las direcciones de correo de los alumnos.

Es importante tener en cuenta que este formato es con la intención de tener que evitar el gasto económico de las encuadernaciones y el gasto ecológico de los plasticos y demás que se producen. Por tanto, incluir la práctica en este sobre se refiere a incluir los folios, incluso sueltos. Por supuesto, no incluir la práctica encuadernada.

La fecha de entrega límite para esta práctica es el día 2 de Junio de 2003.


Programación en C++. Desarrollado por Antonio Garrido, © 2003