Está en la página 1de 5

Fundamentos de Programación 1 para GISIT

Práctica 4: Tipos de datos avanzados


En esta práctica reforzaremos los conocimientos teóricos adquiridos por el alumno hasta
la fecha, en particular los relacionados con los tipos de datos avanzados. Para ello, se
realizarán dos programas en C para dar solución 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 números aleatorios del 1 al 100 (todos
los números de un cartón han de ser forzosamente distintos). Por otro lado, se irá
generando una secuencia de números aleatorios comprendidos también entre 1 y 100, que
representan las bolas que van saliendo del bombo (esta secuencia tampoco podrá tener
números repetidos). La mecánica del programa será la siguiente: en cada iteración,
mostraremos los números que han ido saliendo del bombo hasta el momento, así como
los dos cartones, donde habremos tachado (en vez del número saldrá una X) los números
que ya hayan salido. Esperaremos entonces a que el usuario pulse una tecla y a
continuación sacaremos una nueva bola del bombo, actualizaremos los cartones con la
nueva bola y volverá a aparecer toda la información (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 cartón ganará. A continuación
mostramos un posible ejemplo de ejecución:

Práctica 4: Tipos de datos avanzados. Pg 1


Fundamentos de Programación 1 para GISIT

NOTA: El ejercicio ha de solucionarse a través de vectores. Aunque el cartón se imprima


en forma de matriz por pantalla, internamente es mucho más adecuado tratarlo como un
vector. Por otro lado, el proceso para generar los cartones y los números del bombo sin
que se repitan números se considera especialmente importante. Además, el ejercicio no
se considerará válido si no está convenientemente dividido en funciones.

Ejercicio 2

En este ejercicio vamos a implementar el conocido juego de las 4 en raya o conecta 4. El


programa comenzará mostrando un panel de 6x7 casillas vacío (celdas con ‘.’) e
informando de que es el turno de las fichas rojas. Sobre el tablero se dibujará una flecha
que simboliza la columna seleccionada. El jugador podrá mover la flecha a izquierda o
derecha con los cursores para seleccionar otra columna, o bien tirar en la columna actual
con la tecla enter. Cuando tire, se colocará una ficha sobre el último hueco de dicha
columna. Si es el turno de las rojas se colocará el símbolo ‘R’ y si es el de las amarillas
el símbolo ‘A’. Después de tirar, se comprobará el panel para ver si se han conseguido
colocar 4 fichas iguales en línea. Si es así, el programa terminará y dirá quién ha ganado
(rojas o amarillas). Si se ha agotado el panel y no hay ganadores, el programa terminará
informando de que ha habido tablas. En otro caso, cambiará de turno para que siga
jugando el otro jugador.

A continuación mostramos una serie de pantallas intermedias de una posible


partida:

Práctica 4: Tipos de datos avanzados. Pg 2


Fundamentos de Programación 1 para GISIT

NOTA: Para realizar correctamente el ejercicio es necesario el uso de matrices y, como


en el anterior, la descomposición modular es especialmente importante.

Entrega

Los alumnos tendrán que entregar la práctica a través del Campus Virtual como máximo
el lunes 14 de enero de 2019 a las 23:59. La entrega constará de los códigos fuente de
los ejercicios (los archivos .cpp únicamente) y un informe como el solicitado en la
práctica 1 (en pdf).

Práctica 4: Tipos de datos avanzados. Pg 3


Fundamentos de Programación 1 para GISIT

Anexo: Cómo usar los cursores en C

Para recoger las pulsaciones de los cursores sin tener que pulsar intro utilizaremos la
función getch(). Para discriminar los cursores normales de los cursores del teclado
numérico (en teclados extendidos) se emiten dos caracteres seguidos por cada letra: el
primero es el juego de cursores del que proviene (-32 o 0 respectivamente) y el segundo
el código de tecla (72 arriba, 80 abajo, 75 izquierda, 77 derecha y 13 intro). Además, si
el blocknum está activado recibiremos un número en vez de dichos códigos (8 arriba, 2
abajo, 4 izquierda y 6 derecha). En Linux y Mac se producen casos similares con otros
códigos. Para contemplar cualquiera de estos casos os proporcionamos el siguiente
ejemplo:

//esperamos una tecla


char tecla = getch();
//doble letra en Windows
if(tecla==-32 || tecla==0){
tecla=getch();
}
//doble tecla en Linux/Mac
if(tecla==27){
tecla=getch();
tecla=getch();
}
//en función de la tecla pulsada
switch(tecla){
//casos arriba
case 72:
case '8':
case 'A':
//acciones arriba
//…
break;
//casos abajo
case 80:
case '2':
case 'B':
//acciones abajo
//…
break;
//casos izquierda
case 75:
case '4':
case 'D':
//acciones izquierda
//…
break;
//casos derecha
case 77:
case '6':
case 'C':
//acciones derecha
//…
break;
}

Práctica 4: Tipos de datos avanzados. Pg 4


Fundamentos de Programación 1 para GISIT

La función getch() solo está disponible en la librería conio.h, por lo que solo se puede
usar en Windows. En Linux o Mac incluye el siguiente código al principio de tu programa
para simular dicha función:
#include <termios.h>
#include <unistd.h>
#include <fcntl.h>
int getch(void){
struct termios oldt, newt;
int ch;
tcgetattr( STDIN_FILENO, &oldt );
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr( STDIN_FILENO, TCSANOW, &newt );
ch = getchar();
tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
return ch;
}

Práctica 4: Tipos de datos avanzados. Pg 5

También podría gustarte