Rosa Laplaza Castán J.Miguel López Valencia JUEGO DE LA VIDA En el zona de declaración se declara el uses "crt" para poder tener control de la pantalla. En el apartado type se declara al vector bidimensional de enteros "Tcasilla" y a continuación todos los procedimientos y funciones necesarios para llevar a cabo el programa(con una ordenación especifica para que funcione) El cuerpo principal del programa comienza borrando la pantalla con "clrscr" para ello se utiliza la rutina de control de pantalla (crt) que se ejecuta al inicio de la zona de declaración de variables (con esta rutina además podremos cambiar el color del texto).Además se carga randomize, cargando el procedimiento interno que posee Pascal, para inicializar la obtención de números aleatorios. Se utiliza en conjunto con "ramdom" que devuelve un número aleatorio. Se inicializa la variable "j" que indicará cuando salimos del programa y mientras que esta variable no cambie su valor se seguirá en el menú principal, para ello se utiliza el la estructura no determinista"while" y además se usan las directivas del compilador para detectar errores en la entrada de datos con la estructura no determinista "repeat" para pedir el dato hasta que no sea adecuado. Para generar el menú realizamos una selección múltiple "case" se realizará una operación diferente para cada caso. Cada operación llama a procedimientos anillados. En el primer caso GenerarMundo se utiliza el procedimiento "GenerarMundo", y dentro de éste se hace una llamada al procedimiento "PedirDatos". En el segundo caso, Ejecucion se utiliza el procedimiento "Ejecucion", y dentro de éste se hace la llamada a los procedimientos "PedirReglas" y "PedirModoEjecucion" (éste ultimo hace llamadas a "PediTurnos", "GenerarMundo", DibujarMundo" y "DibujarEstadoFinal"). De la misma manera, estos últimos procedimientos también realizan sus respectivas llamadas a otros, como se explicará detalladamente en el apartado de explicación de procedimientos y funciones. Se obvia la ejecución del tercer paso, ya que corresponde a la segunda parte de la entrega donde se manejarán ficheros. En el cuarto caso Salir, se realiza una llamada al procedimiento "Salir". PROCEDIMIENTOS Y FUNCIONES Dependiendo del uso de los parámetros en los procedimientos y funciones los modos de paso pueden variar. Si es paso por valor se realiza una copia del parámetro actual en el parámetro formal, siendo éstos variables independientes y unidireccionales. Si por el contrario es paso por referencia el parámetro formal obtiene una referencia al parámetro real. Ahora no son dos variables independientes, son la misma variable con dos referencias distintas. Procedure PedirDatos Se le pide al usuario el tamaño del tablero y la probabilidad de que una célula esté viva. Se utilizan las directivas del compilador para detectar errores en la entrada de datos con la estructura no determinista "repeat" para pedir el dato hasta que no sea adecuado. Este procedimiento es llamado por "GenerarMundo". Sus parámetros de paso por referencia son "tamanio" y "probabilidad". Procedure GenerarMundo Genera un mundo aleatorio. Para ello se utilizan los parámetros de paso por referencia "tamanio" (de tipo integer) y "casilla" (de tipo tcasilla). Se utilizan variables locales para recorrer el vector. Éstas son "i" y "j", de tipo integer. Además se usan las variables locales "a" y "probabilidad", de tipo real. A la variable "a" se le asigna un random, que devuelve un número aleatorio. GenerarMundo llama al procedimiento PedirDatos, y a su vez, es llamado por el procedimiento PedirModoEjecucion. En la estructura principal del programa el menú llama a este procedimiento en el primer caso. Procedure PedirTurnos Pide al usuario los turnos a ejecutar. Se utilizan las directivas del compilador para detectar errores en la entrada de datos en conjunto con la estructura no determinista "repeat" para pedir el dato hasta que no sea adecuado. El parámetro de paso por referencia es "turno". PedirTurnos es llamado por el procedimiento PedirModoEjecucion. Procedure PedirReglas Se solicita al usuario que decida entre las reglas por defecto o cambiarlas. Para ello se utiliza la estructura de selección binaria "if" ... "else". Todo ello se utiliza con las directivas del compilador y repeat para detectar errores en la entrada. Se necesita una variable local llamada "i" que en función de su valor asigne las reglas por defecto o pida al usuario las reglas. PedirReglas necesita los parámetros de paso por referencia "x", "y" y "z". PedirReglas es llamado por el procedimiento Ejecucion. Procedure RellenarVector Le asigna el valor a cada casilla del vector, dependiendo de las reglas elegidas, del tamaño del tablero. Para ello utilizamos la estructura de selección binaria anillada "if” ... "else", introduciendo en cada caso las correspondientes condiciones para que esté viva o muerta la célula. En nuestro caso "casilla [a,b]. Para ello se requieren los parámetros de paso por referencia "copia" y "casilla" de tipo tcasilla y los parámetros "a" y "b" de tipo integer. Los parámetros de paso por valor son "x", "y", "z" y "tamanio", de tipo integer. Además se requiere una variable de tipo local "c", la cual suma las células vecinas que están vivas. Este procedimiento es llamado por Evolucion y DibujarEstadoFinal. Procedure Evolucion Recorre el vector del nuevo estado y rellena el vector realizando una llamada al procedimiento RellenarVector. El parámetro de paso por referencia es "casilla" de tipo tcasilla. Los parámetros de paso por valor son "x", "y", "z", "turno" y "tamanio" de tipo integer. Las variables locales son "j", "aux", "a" y "b", de tipo integer y "copia" de tipo tcasilla. Para comenzar se inicializan a "j" y a "aux" los correspondientes valores 0 y 1. Con la estructura no determinista while se impone la condición de que se continúen generando los estados mientras que la variable j no cambie de valor. La variable "aux" se utiliza como acumulador. Cuando el valor de esta variable coincide con el valor que tiene turno se sale del bucle while. Dentro de éste, se recorre el vector con dos estructuras deterministas for utilizando las variables "a" y "b" y se hace una copia del mismo. A continuación se vuelve a recorrer, rellenándose el vector para el siguiente estado. Se muestra en pantalla. Este procedimiento es llamado por DibujarMundo. Procedure DibujarEstadoFinal Este procedimiento es análogo al procedimiento Evolucion, con la salvedad de que sólo escribe el vector en pantalla cuando ha llegado al estado final. Este procedimiento hace una llamada a rellenar vector, y es llamado por PedirModoEjecucion. Procedure DibujarMundo Dibuja cada nuevo estado. El parámetro de paso por referencia es "casilla" de tipo tcasilla, y los de paso por referencia son "turno", "x", "y" y "z" y "tamanio". Se requieren las variables locales "a" y "b" de tipo integer para recorrer el vector en conjunto con dos estructuras deterministas “for”. Cada una de ellas recorre el vector, una por filas y la otra por columnas. Procedure PedirModoEjecucion Pide al usuario el modo de ejecución, es decir, paso por paso o mostrar únicamente el resultado final. Para ello se utilizan las directivas del compilador para detectar errores en la entrada de datos con la estructura no determinista "repeat" para pedir el dato hasta que no sea adecuado. Utilizamos la estructura de selección binaria “if ... else”. Los parámetros de paso por referencia son "casilla" de tipo tcasilla, y "turno" de tipo integer, y los de paso por referencia son "x", "y", "z" y "tamanio". Se requiere de la variable local "i" que guardará la elección del usuario. En el modo de ejecución paso por paso se hace la llamada a los procedimientos PedirTurno, GenerarMundo y DibujarMundo. En el caso de que el modo de ejecución sólo muestre el resultado final, se hace la llamada a los procedimientos GenerarMundo y DibujarEstadoFinal. Procedure Ejecucion Ejecuta el programa con todas las reglas (condiciones) que ha elegido el usuario. Se hace la llamada al procedimiento PedirReglas y al procedimiento PedirModoEjecucion. El parámetro de paso por valor es "tamanio", y los de paso por referencia son "x", "y", "z" y "turno", de tipo integer, y casilla de tipo tcasilla. En la estructura principal del programa el menú llama a este procedimiento en el segundo caso. Procedure Salir Cambia el valor de la variable "j" para poder salir del bucle “while” del programa principal, es decir, también se sale del programa. El parámetro de paso por referencia es "j". En la estructura principal del programa el menú llama a este procedimiento en el cuarto caso. ---------------------------- (añadido tras someter) ---------------------------- 18:24:57 11/12/09 -> Segun los datos introducidos los ficheros son: G02P06D2 -> Los autores del trabajo son: Laplaza Castán, Rosa López Valencia, J.Miguel Nombres originales de los archivos entregados -> J2.PAS, juego.txt