Examen Parcial Otoño 2012 (5) (2012)

Examen Español
Universidad Universidad Politécnica de Cataluña (UPC)
Grado Ingeniería de Sistemas de Telecomunicación - 1º curso
Asignatura Fonamentos de Ordenadores
Año del apunte 2012
Páginas 4
Fecha de subida 12/11/2014
Descargas 0
Subido por

Vista previa del texto

26/11/12. Control de Laboratorio. Fundamentos de Ordenadores - Grupo 81 - Instrucciones: La duración del control es de 1hora y 50 minutos + 5 minutos para la entrega en Atenea La prueba es individual y sin apuntes. No se puede conectar a Internet ni consultar a ningún compañer@ Debéis entrar al ordenador con la cuenta de invitado (username y contraseña: invitado (2 veces)) Debéis editar el fichero control-81.c que os proporcionará la profesora y poner Nombre y Apellidos Enunciado: Dada la siguiente definición de constantes simbólicas, tipos de datos y prototipos de funciones: #define N 10 typedef struct{ char nombre[N]; int ncars; /* numero de caracteres del nombre sin incluir el ’\0’ */ }telemento; typedef struct{ int elec; /* eleccion del computador: al azar */ int elej; /* eleccion del jugador: desde teclado */ }teleccion; int eleccion_computador(); /* función ya implementada */ void eleccion_jugador(int *eleccion); void mostrar_eleccion(telemento elecc,telemento elecj); void ganador(teleccion x); Escribe un programa en C que simule una partida al juego Piedra, papel ó Tijera entre el computador y un jugador. El programa muestra por pantalla la elección hecha por los dos y el resultado de la partida para el jugador Para implementar el programa, debes completar el fichero control-81.c proporcionado y hacer lo siguiente: -1- (3 puntos) escribir, compilar y verificar la función void eleccion_jugador(int *eleccion); que pide introducir desde teclado un carácter P, p ó T, que indica la elección del jugador (Piedra, papel ó Tijera), lee el carácter introducido y devuelve la elección del jugador a través de su parámetro: • si el carácter introducido no es correcto, la función vuelve a pedirlo • si introduce P, significa que el jugador elige Piedra y la función devuelve 0 • si introduce p, significa que el jugador elige papel y la función devuelve 1 • si introduce T, significa que el jugador elige Tijera y la función devuelve 2 -2- (2 puntos) escribir, compilar y verificar la función void mostrar_eleccion(telemento elecc, telemento elecj); que muestra por pantalla dos mensajes de Piedra ó papel ó Tijera, indicando la elección del computador (al azar) y la elección del jugador (desde teclado). La elección del computador se hace con la función eleccion_computador()que devuelve un número aleatorio entre 0, 1 y 2. De nuevo, 0 indica que el computador elige Piedra, 1 que elige papel, y 2 que elige Tijera -3- (3 puntos) escribir, compilar y verificar la función void ganador(teleccion x); que determina si el jugador ha ganado, perdido ó empatado la partida y muestra un mensaje por pantalla indicándolo. Las reglas del juego son: Piedra gana a Tijera, papel gana a Piedra y Tijera gana a papel -4- (2 puntos) completar, compilar y verificar el programa principal para que simule una partida del juego /* control-81.c */ #include <stdio.h> #define N 10 typedef struct{ char nombre[N]; int ncars; }telemento; typedef struct{ int elec; /* eleccion del computador: al azar */ int elej; /* eleccion del jugador: desde teclado */ }teleccion; int eleccion_computador(); void eleccion_jugador(int *eleccion); void mostrar_eleccion(telemento elecc,telemento elecj); void ganador(teleccion x); main() { telemento j[3]={{"Piedra",6},{"papel",5},{"Tijera",6}}; teleccion partida; srand(getpid()); printf("********Comienza el juego PpoT********\n"); partida.elec=eleccion_computador(); /* pregunta 4 */ } int eleccion_computador() /* funcion proporcionada */ { return(rand()%3); } void eleccion_jugador(int *eleccion) { /* pregunta 1 */ } void mostrar_eleccion(telemento elecc,telemento elecj) { /* pregunta 2 */ } void ganador(teleccion x) { /* pregunta 3 */ } Aquí tienes un ejemplo del posible funcionamiento del juego. En negrita se indica lo que introduce el jugador: _$ ./ppt ********Comienza el juego PpoT******** Jugador! Elige (PpT): P COMPUTADOR: Tijera JUGADOR: Piedra Felicidades Jugador: ¡Has Ganado! _$ ./ppt ********Comienza el juego PpoT******** Jugador! Elige (PpT): p COMPUTADOR: papel JUGADOR: papel ¡Hemos empatado! _$ ./ppt ********Comienza el juego PpoT******** Jugador! Elige (PpT): t Jugador! Elige (PpT): T COMPUTADOR: Piedra JUGADOR: Tijera Lo siento Jugador: ¡Otra vez sera! // SOLUCION: // ppt.c #include <stdio.h> #define N 10 typedef struct{ char nombre[N]; int ncars; }telemento; typedef struct{ int elec; /* eleccion del computador: al azar */ int elej; /* eleccion del jugador: desde teclado */ }teleccion; int eleccion_computador(); void eleccion_jugador(int *eleccion); void mostrar_eleccion(telemento elecc,telemento elecj); void ganador(teleccion x); main() { telemento j[3]={{"Piedra",6},{"papel",5},{"Tijera",6}}; teleccion partida; srand(getpid()); printf("********Comienza el juego PpoT********\n"); partida.elec=eleccion_computador(); eleccion_jugador(&partida.elej); mostrar_eleccion(j[partida.elec],j[partida.elej]); ganador(partida); } int eleccion_computador() /* funcion proporcionada */ { return(rand()%3); } void eleccion_jugador(int *eleccion) { char c; printf("Jugador! Elige (PpT): "); scanf("%c%*c",&c); while(c != ’P’ && c != ’p’ && c != ’T’) { printf("Jugador! Elige (PpT): "); scanf("%c%*c",&c); } if(c == ’P’) *eleccion=0; else if(c == ’p’) *eleccion=1; else*eleccion=2; } void mostrar_eleccion(telemento elecc,telemento elecj) { int i; printf("COMPUTADOR: "); for(i=0;i<elecc.ncars;i++) printf("%c",elecc.nombre[i]); printf("\nJUGADOR: "); for(i=0;i<elecj.ncars;i++) printf("%c",elecj.nombre[i]); } void ganador(teleccion x) { if(x.elec == 0 && x.elej == 1 || x.elec == 1 && x.elej == 2 || x.elec == 2 && x.elej == 0) printf("\nFelicidades Jugador:Has Ganado!\n"); else if(x.elec == 0 && x.elej == 2 || x.elec == 1 && x.elej == 0 || x.elec == 2 && x.elej == 1) printf("\nLo siento Jugador:Otra vez sera!\n"); else printf("\nHemos empatado!\n"); } ...