Susana Julian Valero G08 Puesto 11 Se comienza con la palabra program, seguida del nombre elegido para la práctica 3,Juegovida. Se escribe la instrucción uses para poder utilizar la unidad crt. Se define la constante N,a la cual le daremos el valor de 20,hace referencia al tamaño maximo del tablero, anteriormente se escribio la palabra reservada const. Se define un tipo de registro, para ello se escribe type y posteriormnte se define juego como registro (con la palabra reservada record), dentro de este registro tenemops dos campos, uno llamado tamanno, de tipo entero, que utilizaremos para hacer referencia al tamaño del tablero, y otro llamado tablero, que es una matriz,un vector de dos dimensiones, por eso se define como array y sus componentes son de tipo entero. Para finalzar la definicion de registro se escribe un end. La primera funcion se denomina tamannotablero,y sirve para definir el tamaño del tablero deseado por el usuario,la funcion nos devuelve un entero. En ella se utiliza una variable denominada tamann, de tipo entero, se comianza un bucle repeat-until, para que no haya errores(IOResult=0) y el numero introducido por el usuario se encuentre entre 4 y 20,incluidos, que son las limitaciones que el programa da. Para ello se han escrito los simbolos necesarios para desctivar y activar los errores ({$I-},{$I+}). Se finaliza la funcion asignando el valor del tamaño del tablero al nombre de la funcion, una vez que sea correcto el valor. La segunda funcion es muy similar a la primera, se denomina probabilidadcasilla, y sirve para establecer el valor que quiere el usuario para la probablidad de que una casilla este viva ó no. Luego ya se haran las comparaciones,esta funcion es simplemente para que el usuario introduzca la probabilidad que quiere, por lo tanto la funcion devuelve un real. Tiene una variable, dsenominada p, de tipo real, y se vuelve a hacer un bucle repeat-until, con las limitaciones de que ha de estar entre 0 y 1, por supuesto se hace robusto utilizando el IOResult, y los simbolos anteriormente citados. Finalmente se asigna la variable al nombre de la funcion. El siguiente procedimiento se denomina casillaviva, y sirve para construir el tablero de forma aleatoria,tiene 2 parametros, uno de entrada, llamado prob, de tipo real, su mecanismo es por valor y el otro es de entrada y salida, por lo tanto su mecanismo de paso es por referencia, se define como v y es de tipo juego. Dentro del procedimiento se definen 2 variables de tipo entero, i y j. Se comienza con dos for-do, el primero va de i:=2 to v.tamanno-1 y el segundo desde J:=2 to v.tamanno-1, esto significa que se recorre toda la matriz desde la fila(i) segunda hasta la penúltima, y todas las columnas(j) desde la segunda hasta la penultima, ésto se realiza de esta manera porque la primeras y ultimas filas y columnas deben ser todas 0 (ó casilla muerta). Dentro de los for-do, se escribre un if-then-else, en el que se llama a la funcion random y se compara con el valor de la porbabilidad (parametro prob), si el random es menor ó igual a la probabilidad entonces la casilla está viva (es decir es 1) sino esta muerta (es decir, es igual a 0). Para referirnos a una casilla se hace v.tablero[i,j], la v es el parametro del registro juego'.'tablero es el campo del registro que hace referencia al vector, y como es una matriz, por eso tenemos 2 dimensiones [i,j]. Ahora se escribe el procedimiento denominado primerasultimascasillas, el cual va a definir las primeras y ultimas filas y columnas como ceros, es decir casillas muertas, presenta un parametro de salida, por lo tanto su mecanismo es por referencia,(v: de tipo juego), dentro del procedimiento se tienen 2 variables (i,j de tipo entero) Se vuelven a hacer for-do para recorrer toda la matriz. El primero va de i:=1 a 1 y j:=1 a v.tamanno, es decir en la primera fila y en todas las columnas se definen las casillas como 0 (v.tablero[i,j]:=0) El segundo va de i:=v.tamanno a v.tamanno y j:=1 a v.tamanno, es decir en la ultima fila y en todas las columnas se definen las casillas como 0 (v.tablero[i,j]:=0) El tercero va de i:=1 a v.tamanno y j:=1 a 1, es decir en todas las filas y en la primra columna se definen las casillas como 0 (v.tablero[i,j]:=0) El cuarto va de i:=1 a v.tamanno y j:=v.tamanno a v.tamanno, es decir en todas las filas y en la ultima columna se definen las casillas como 0 (v.tablero[i,j]:=0). El siguiente procedimiento se denomina mostrartablero, presenta un parametro v de tipo juego, es de salida y su mecanismo de paso es por referencia. Dentro tiene 2 variables i,j, de tipo entero, se tiene 2 for-do, aqui si que se recorre toda la matriz for i:=1 to v.tamanno do - for j:=1 to v.tamanno do, y se escribe el vector, mediante un writeln. La funcion numeroturnos sirve para que el usuario introduzca el numero de turnos que quiere, devuelve un entero, presenta una variable turno de tipo entero, y contiene un bucle repeat- until con IOResult=0 para que sea robusta, finalmente se asigna el valor de turno al nombre de la funcion. La siguiente funcion, denominada opcion, sirve para que el usuario eliga entre 2 opciones, dentro del apartado 2, nos devuelve un entero, contiene una variable de tipo entero llamada op, y se tiene un bucle repeat-until, hasta que el usuario introduzca la opcion1 ó la opcion2, el bucle es robusto. Finalmente s asigna la variable al nombre de la funcion. Se tiene un procedimieno llamado Pulsatecla, que como su nombre indica, simplemente se utiliza para que el usuario presione una tecla, cuyo valor no es importante, no lo guardamos, se tiene una variable de tipo char, llamada t, leemos la variable, simplemente (read), y se utiliza la funcion keypressed y readkey. El procedimiento menu, se utiliza para mostrar al usuario las distintas opciones que puede tomar en la practica,contiene un parametro de salida,su mecanismo de paso es por referencia,previamente se ha secrito la palabra var,se llama num, de tipo entero, dentro del procedimiento se encuentra un repeat-until con las limitaciones de que el numero introducidio por el usuario debe ser mayor que cero y menor que 5,por supuesto no debe haber errores para lo que se utiliza el IOResult=0 El procedimiento reglas, consiste en mostrar al usuario las reglas del juego y permite a éste cambiarlas si lo desea, contiene 3 parametros de entrada-salida de tipo entero, llamados a,b y c. Su mecanismo de paso es por referencia.Tiene una variable llamada tec, de tipo char. Se escriben una serie de writeln explicando las reglas y mediante un if-then se le da la popcion de cambiarlas, si eso es lo deseado por el usuario posteriormente mediante repeat-until, éste debera introducir los valores que quiere para las 3 letras,los bucles presentan las limitaciones de que deben ser mayores ó iguales a 0 y menores que 9. El procedimiento nuevotablero, sirve para calcular el nuevo tablero, contiene 4 parametros de entrada: a,b,c de tipo entero y v de tipo juego,su mecanismo de transmision es por valor y un parametro de salida estadosiguiente de tipo juego, su mecanismo sera por referencia. Presenta 3 variables de tipo entero i,j y viva (que hace referencia a las casillas vivas vecinas) Hay 2 bucles for-do que recorren casi toda la matriz excepto las primeras y ultimas filas y columnas, por eso va de i:=2 to v.tamanno-1, esto significa que recorre todas las filas de la 2 hasta la penultima, luego hay otro for-do igual pero con j, que seria para las columnas. Se le asigna a la variable viva un 0, ya que cada vez que comnienze el bucle ésta debe ser 0. Y se llevan a caso varios if-then-else, donde se comparan las 8 casillas que hay alrededor de la casilla [i,j], si éstas son iguales a 1(es decir estan vivas) entonces a viva se le suma 1 sino se le suma un 0, asi para las 8 casillas de alrededor Luego con un if-then-else, se compara la casilla [i,j] donde si esta casilla esta muerta (=0), contiene otro if que compara la variable viva con el parametro a, y si coinciden la casilla del esatadosiguiente.tablero [i,j] estara viva (=1), sino estara muerta (=0). Si la casilla [i,j] esta viva (=1) entonces compara viva con los pàrametros b y c, si se encuentra en los limites estadosiguiente.tablero[i,j] estara vivo (=1) y sino estara muerto (=0). El ultimo prodedimiento se denomina cargar_mundo, presenta 2 variables: fichero de tipo text, numeros de tipo string. Se comienza el procedimiento con la palabra assign(fichero, aqui se escribe donde se encuentra el fichero), se pone reset(fichero) sirve para abrir un fichero de lectura y escribimos while not eof, esta frase significa que mientras no se acabe el fichero el procedimiento hara lo que le ordenemos,lo que queremos es que lea el fichero y lo escriba a modo de matriz, finalmente cerramos el fichero con un close (fichero). Se definen las variables del programa principal(precedidas de la palabra var): * turnos: es la variable donde se asignara el valor de la funcion numeroturnos, es de tipo entero * numero: es el numero que debe elegir el usuario en el menu para escoger una opcion u otra, de tipo entero. * i: de tipo entero, se utiliza de contador en un for-do * x,y,z: guardan los valores de las reglas del juego, son de tipo entero. * probabilidad: la probabilidad elegida por el usuario, se le asignara el valor de la funcion probabilidadcasilla, es de tipo real. * vector, vectornuevo: son de tipo juego, es decir son variables del registro, y hacen refernecia al estado inicial del tablero y al siguiente. * tabl: de tipo juego, se utilizara para guardar el tamaño del tablero. * opcionelegida: se le asigna el valor de la funcion opcion,es de tipo entero. * tecla: de tipo char, sirve para que el usuario presione una tecla. {Se comienza el programa principal} Se empieza con un begin, llamamos a la funcion random, escribiendo randomize. Se asigna el valor del tamaño del tablero (tabl.tamanno) a 20, ya que es lo máximo que puede llegar a tener, luego el usuario ya elegirá. Definimos las variables x:=3,y:=2,z:=3, segun lo predefinido, por si el usuario no quiere cambiar las reglas. Se comienza un bucle repeat-until, escribiendo anteriormente los simbolos {$I-} y posteriormente {$I+}, para que no haya errores.(El primero descativa y el segundo activa.) Se llama al procedimiento menu, se realiza un case of, con varias opciones, Si numero es igual a 1:- llamamos a la funcion tamannotablero, y asignamos el valor en la variable vector.tamanno, - se llama a la funcion probabilidadcasilla y se asigna el valor en la varibale probabilidad - se llama al procedimiento casilllaviva, - al procedimiento primerasultimascasillas y al procedimiento mostrartablero. Si numero es igual a 2: -llamamos a la funcion numeroturnos y se asigna el valor a turnos, - se llama al procedimiento reglas, - a la funcion opcion que asignamos el valor en la variable opcionlegida, y se lleva a cabo otro case of, si opcionelegida es 1 entonces, se llama al procediminto mostrartablero, se realiza un for-do (tantas veces como turnos haya elegido el usuario), se asigna el tamaño del tablero viejo al tablero nuevo,se llama al procedimiento nuevotablero, al procedimiento primerasultimascasillas, al procedimiento mostrartablero y asignamos el vectornuevo al vector antiguo,ya que el vector nuevo de ahora sera el vector viejo del siguiente turno,por ultimo se llama al procedimiento pulsatecla. Si la opcionelegida es 2, es similar pero con algun cambio, hacemos un for-do tantas veces como turnos se haya escogido, asignamos el tamaño del vector viejo al nuevo, llamamos al procedimiento nuevotablero,al procedimiento primerasultimas- casillas, y se asigna el vectornuevo al vector viejo como antes, fuera del bucle llamamos al procedimiento mostrartablero. (ya que en este caso solo hay que mostrar el último tablero) Si numero es igual a 3: se llama al procedimiento cargar_mundo. Solo se saldra del bucle introduciendo un 4, finalmente escribimos clrscr (para limpiar la pantalla cada vez que comienza el programa) y terminamos con un end. ---------------------------- (añadido tras someter) ---------------------------- 19:48:18 11/12/09 -> Segun los datos introducidos los ficheros son: G08P11D2 -> Los autores del trabajo son: JULIAN VALERO, SUSANA Nombres originales de los archivos entregados -> JUEGOVID.PAS, juegovida.txt