Programación I Práctica parcial (ENTREGA OBLIGATORIA) Práctica 1: diagrama de barras Escribid un programa que, dado un array de 10 enteros (introducidos a mano en el código), genere un diagrama de barras que represente sus valores. El diagrama ha de cumplir los siguientes requisitos: - las barras irán de abajo a arriba, de forma que la barra más larga ha de acabar en la línea siguiente a la de ejecución, y no más abajo las barras estarán formadas por un carácter que determine el usuario el grosor de cada barra también estará determinado por el usuario entre dos barras habrá tantos espacios en blanco como determine el usuario. Por ejemplo, si los tres primeros elementos del array son 3-2-4, el carácter que forma las barras es el asterisco, el grosor es 3 y la separación entre barras 2, la parte correspondiente del diagrama de barras será: C:\...> practica1 *** *** *** *** *** *** *** *** *** Fijaos cómo no hay ninguna línea en blanco entre el comando de ejecución y el primer asterisco Práctica 2a: juego del laberinto El siguiente recuadro representa un mapa, donde cada cruz representa un obstáculo: A B C D E X X 5 4 3 2 1 X X X X El usuario debe elegir una casilla de origen en la que se sitúa un personaje y una de destino (o tesoro). El usuario indicará dichas casillas de origen y destino mediante sus coordenadas. Por ejemplo origen 1A y destino 5E. A continuación, el programa debe representar por pantalla el mapa anterior, mostrando los obstáculos (con el carácter ‘X’), la posición del personaje (identificado con el carácter ‘O’) y el destino (identificado por el carácter ‘$’). Las casillas vacías se representarán mediante un guión. Para una mejor visualización, entre dos celdas de una misma fila se dejará un espacio en blanco. Así pues, el mapa inicial se representaría así: X O X – X X X D X - El objetivo del juego es que el usuario vaya moviendo el personaje de la casilla origen a la casilla destino. El programa debe controlar que no vaya a una casilla marcada con un obstáculo, ni se salga del tablero. El usuario decide el movimiento indicando la dirección mediante: - A: Arriba B: aBajo I: Izquierda D: Derecha Si el usuario indica un movimiento incorrecto, el programa debe avisarle y pedirle que repita el movimiento. Si el movimiento es correcto, debe a continuación dibujar el mapa situando el personaje (carácter ‘O’) en el nuevo lugar correspondiente. Si el movimiento lleva a la casilla destino, el programa debe indicar que el usuario ha conseguido acabar el juego y el programa termina. Práctica 2b: juego del laberinto con monstruo La base del juego es la misma, pero se añade un monstruo que si llega a coincidir con el personaje en la misma casilla, hace que el juego termine y el usuario pierda (el monstruo se come al personaje). El usuario seleccionará la casilla inicial del monstruo. Cada vez que el usuario determine el siguiente movimiento del personaje, el programa generará un movimiento aleatorio del monstruo. El programa deberá comprobar que ese movimiento es legal (no puede caer en un obstáculo ni salir del tablero), y si no lo es obtener otro. Asimismo, el programa, una vez obtenido un movimiento legal (del personaje o del monstruo), debe comprobar si el monstruo come al personaje, y en tal caso, terminar la partida. Cuando se represente el mapa, también debe mostrarse la posición del monstruo, mediante el carácter ‘M’. NOTA: cómo generar un número aleatorio en C (entre 0 y 3) Al principio del programa hay que llamar a la función iniciar_aleatorios. Y después, cada vez que se quiera un nuevo número aleatorio, llamar a la función aleatorio4. Hay que incluir las librerías stdlib y stdio. Por ejemplo, el siguiente programa muestra 10 números aleatorios entre 0 y 3 seguidos: #include <stdio.h> #include <stdlib.h> #include <time.h> void iniciar_aleatorios() { srand((unsigned)time(NULL)); } int aleatorio4() { return rand()%4; } main() { int i; iniciar_aleatorios(); for (i=0;i<10;i++) printf("%d\n",aleatorio4()); } Para vuestro programa, tendréis además que pasar del entero 0 a 3 al carácter ‘A’, ‘B’, ‘I’ o ‘D’, mediante una estructura condicional. Documentación y memoria Además del correcto funcionamiento del programa, se valorará: - Estructuración en funciones (y facilidad para la reutilización) Documentación del código (y legibilidad) Así mismo, hay que entregar una memoria (documento en Word o RTF) en la que se incluya una explicación del funcionamiento general del código, y se justifiquen las funciones utilizadas. Además, cada función debe ser descrita brevemente. Indicaciones para la entrega La entrega de esta práctica es obligatoria. La fecha límite de entrega es la siguiente, en función del grupo de prácticas en que estéis matriculados (atención a los que no estén acudiendo a las sesiones de su grupo!): - P13: miércoles 9 de noviembre, antes de las 8:30 de la mañana P12: jueves 10 de noviembre, antes de las 8:30 de la mañana P11: viernes 11 de noviembre, antes de las 8:30 de la mañana P22: jueves 10 de noviembre, antes de las 15:00 P21: lunes 14 de noviembre, antes de las 14:30 Depositad la carpeta con vuestro trabajo, incluyendo la memoria, (el nombre de la carpeta será vuestros nias, separados por un guión bajo, por ejemplo “31234_32345”) en la carpeta de vuestro grupo correspondiente (P11, P12, P13, P21 o P22), dentro de \\recursos\public\FOLDERS\3371-3372\12406\alumnes\practica_parcial Si una vez copiada tenéis algún problema o tenéis que hacer algún cambio, volvedlo a copiar desde una carpeta nueva añadiendo "_b" al nombre, por ejemplo "31234_32345_b" Recordad que el compilador a utilizar es gcc, en Linux o en Cygwin. Los ficheros que no puedan compilarse con gcc no se corregirán.