Diferencia entre revisiones de «Trabajo»

De Wiki del curso de C
Saltar a: navegación, buscar
(Tareas)
(Tareas)
Línea 58: Línea 58:
 
* Haz que al final de la simulación se guarde en un archivo un historial del número de células vivas en cada iteración. Utiliza un formato que depués puedas representar con un programa como gnuplot: "<num iteración><tabulación><num células vivas><nueva línea>".
 
* Haz que al final de la simulación se guarde en un archivo un historial del número de células vivas en cada iteración. Utiliza un formato que depués puedas representar con un programa como gnuplot: "<num iteración><tabulación><num células vivas><nueva línea>".
 
* EXTRA: Haz que al final de la simulación se guarde un archivo con el último estado del mundo, y que éste se pueda cargar al inicio del programa para continuar con la simulación.
 
* EXTRA: Haz que al final de la simulación se guarde un archivo con el último estado del mundo, y que éste se pueda cargar al inicio del programa para continuar con la simulación.
 +
 +
== Objetos (II): Herencia ==
 +
{| class="wikitable"
 +
! Temas || Fecha de entrega
 +
|-
 +
| 8-9 || 29/04/2016
 +
|}
 +
 +
* Divide tu arquitectura en tres objetos:
 +
** '''world''': Objeto abstracto que no tienen implementada las funciones ''world_get_cell'' y ''world_set_cell'', pero sí el resto
 +
** '''world_normal''': Objeto que hereda de ''world'' e implementa las funciones ''world_get_cell'' y ''world_set_cell'' para acceder a un mundo finito con límites.
 +
** '''world_toroidal''': Objeto que hereda de ''world'' e implementa las funciones ''world_get_cell'' y ''world_set_cell'' para accedar al mundo de forma toroidal.
 +
 +
Imagen con la estructura de clases a modo de guía. Los métodos y atributos variaran en función de tu implementación:
 +
 +
[[Archivo:Gol_uml.png | 900px]]

Revisión del 12:51 26 abr 2016

Información

El proyecto del curso va a ser implementar una versión de el juego de la vida. Se hará de forma incremental, aplicando los conceptos impartidos en cada clase.

Enlaces de interés


Tareas

  • Las tareas se entregarán mediante un pull request, tal y como se explica en este documento.
  • Cada tarea deberá componerse de uno o más commits (preferiblemente varios si es compleja).
  • No se aceptará un pull request que incluya varias tareas.
  • Se recomienda que se realicen las tareas antes de la fecha de entrega, ya que se mandarán tareas nuevas que se irán acumulando.

Versión inicial del juego de la vida

Temas Fecha de entrega
1-5 08/04/2016

Implementa una primera versión del juego de la vida:

  • Utiliza una programación modular y crea un makefile para automatizar la compilación
  • Representa el mundo mediante un array bidimensional de tamaño fijo
  • Ejecuta un numero fijo de iteraciones
  • Muestra el estado inicial y final del mundo mediante printf
  • Comprueba los resultados obtenidos con uno de los simuladores enlazados

Utilizar reserva dinámica de memoria y objetos

Temas Fecha de entrega
6-7 19/04/2016
  • El tamaño del mundo debe poder elegirse en tiempo de ejecución
  • Descompón tu programa en los módulos y objeto(s) que creas convenientes.

Argumentos de main y listas encadenadas

Temas Fecha de entrega
8-9 23/04/2016
  • Haz que el tamaño de tu mundo se pueda pasar como argumentos al lanzar tu programa. Utiliza getoptlong
  • Utiliza las listas encadenadas del núcleo de linux para optimizar el recorrer las células vivas. Por cada una de las células vivas debes inspeccionar ésta y sus vecinas (ver transparencias).

Entrada/Salida

Temas Fecha de entrega
8-9 26/04/2016
  • Añade un parámetro de entrada más a tu programa ("-f <fichero_config>") para pasarle un archivo de configuración donde tendrás guardados parámetros de la simulación. Haz un análisis simple de este fichero: las opciones con un formato estricto y siempre en el mismo orden.
  • Haz que al final de la simulación se guarde en un archivo un historial del número de células vivas en cada iteración. Utiliza un formato que depués puedas representar con un programa como gnuplot: "<num iteración><tabulación><num células vivas><nueva línea>".
  • EXTRA: Haz que al final de la simulación se guarde un archivo con el último estado del mundo, y que éste se pueda cargar al inicio del programa para continuar con la simulación.

Objetos (II): Herencia

Temas Fecha de entrega
8-9 29/04/2016
  • Divide tu arquitectura en tres objetos:
    • world: Objeto abstracto que no tienen implementada las funciones world_get_cell y world_set_cell, pero sí el resto
    • world_normal: Objeto que hereda de world e implementa las funciones world_get_cell y world_set_cell para acceder a un mundo finito con límites.
    • world_toroidal: Objeto que hereda de world e implementa las funciones world_get_cell y world_set_cell para accedar al mundo de forma toroidal.

Imagen con la estructura de clases a modo de guía. Los métodos y atributos variaran en función de tu implementación:

Gol uml.png