Está en la página 1de 4

Fundamentos de Programacin 1 para GISIT

Prctica 4: Tipos de datos avanzados


En esta prctica reforzaremos los conocimientos tericos adquiridos por el alumno hasta la fecha, en particular los relacionados con los tipos de datos avanzados. Para ello, se realizarn dos programas en C para dar solucin a dos ejercicios. Para solucionar el primer ejercicio ser necesario el uso de vectores y para el segundo el uso de matrices.

Ejercicio 1
En este ejercicio implementaremos el juego del bingo simplificado. Habr dos jugadores, con sus respectivos cartones compuestos por 20 nmeros aleatorios del 1 al 100 (todos los nmeros de un cartn han de ser forzosamente distintos). Por otro lado, se ir generando una secuencia de nmeros aleatorios comprendidos tambin entre 1 y 100, que representan las bolas que van saliendo del bombo (esta secuencia tampoco podr tener nmeros repetidos). La mecnica del programa ser la siguiente: en cada iteracin, mostraremos los nmeros que han ido saliendo del bombo hasta el momento, as como los dos cartones, donde habremos tachado (en vez del nmero saldr una X) los nmeros que ya hayan salido. Esperaremos entonces a que el usuario pulse una tecla y a continuacin sacaremos una nueva bola del bombo, actualizaremos los cartones con la nueva bola y volver a aparecer toda la informacin (lista con las bolas que han salido y cartones actualizados). El programa terminar cuando alguno de los dos cartones se complete, con lo que el jugador asociado a dicho cartn ganar. A continuacin mostramos un posible ejemplo de ejecucin:

Prctica 4: Tipos de datos avanzados. Pg 1

Fundamentos de Programacin 1 para GISIT

NOTA: El ejercicio ha de solucionarse a travs de vectores. Aunque el cartn se imprima en forma de matriz por pantalla, internamente es mucho ms adecuado tratarlo como un vector. Por otro lado, el proceso para generar los cartones y los nmeros del bombo sin que se repitan nmeros se considera especialmente importante. Adems, el ejercicio no se considerar vlido si no est convenientemente dividido en funciones.

Ejercicio 2
En este ejercicio implementaremos el juego del gusano simplificado. Nuestro gusano ser una letra X que podremos mover en las cuatro direcciones con los cursores (arriba, abajo, derecha o izquierda) dentro de un panel de NxN elementos (N es una constante que definiremos en el programa). Inicialmente, el panel estar compuesto por obstculos (asteriscos *) y por galletas (smbolo punto .). Como es obvio, por los obstculos no podremos pasar y al pasar por las galletas nos las comeremos, anotando un punto al marcador. El problema es que al comernos una galleta no podremos volver a pasar por esa casilla (se marcar con un guin -), por lo que antes o despus no podremos avanzar y el juego terminar. Por tanto, el objetivo del juego es obtener el mayor nmero de puntos antes de encerrarnos. La mecnica del programa es la siguiente: al comenzar el juego, nos pedir el nivel de dificultad, que ser un nmero del 1 al 3. Dependiendo de dicho nmero inicializaremos el panel con un 10%, 20% 30% de obstculos respectivamente en posiciones aleatorias y el resto con galletas. Adems, elegiremos una posicin libre del panel para la posicin inicial del gusano. En cada iteracin, mostraremos el panel actualizado y el nmero de puntos acumulados (galletas comidas o movimientos vlidos realizados) y esperaremos una tecla del usuario. Si

Prctica 4: Tipos de datos avanzados. Pg 2

Fundamentos de Programacin 1 para GISIT pulsa alguno de los cursores, actualizaremos el panel acorde al movimiento y volveremos a mostrar el panel. Si pulsa la letra i volveremos a inicializar el panel y si pulsa s saldremos del programa. El programa tambin finalizar cuando no sea posibl e avanzar (cuando el gusano quede encerrado). A continuacin mostramos un posible ejemplo de ejecucin con un panel de 10x10:

NOTA: Para leer los cursores es necesario utilizar dos getche(). Dependiendo del juego de cursores pulsado (extendido o reducido) se genera el cdigo -32 o el 0, seguido del cdigo ASCII asociado a la flecha pulsada:
char b=getche(); if(b==-32 || b==0) b=getche(); switch(b){ case 'i': //inicializar el panel break; case 72: //arriba break; case 80: //abajo break; case 75: //izquierda break; case 77: //derecha break; }

NOTA: Para realizar correctamente el ejercicio es necesario el uso de matrices y, como en el anterior, la descomposicin modular es especialmente importante.

Prctica 4: Tipos de datos avanzados. Pg 3

Fundamentos de Programacin 1 para GISIT

El desafo (killer)
Como parte optativa se propone aadir una opcin al men del segundo ejercicio (pulsando r, por ejemplo) para resolver el panel, esto es, que el programa calcule, dada la situacin actual, la secuencia de movimientos del gusano que termine el juego con el mayor nmero de puntos posible. Los alumnos que consigan resolver este problema obtendrn un punto adicional en la asignatura.

Entrega
Los alumnos tendrn que entregar la prctica antes del viernes 20 de diciembre de 2013 a las 23:59h. Al igual que en las prcticas anteriores, se entregarn los dos cdigos fuente y un informe (a ser posible en pdf) siguiendo la estructura que de costumbre (ver apartado de entrega de la prctica 1).

Prctica 4: Tipos de datos avanzados. Pg 4

También podría gustarte