Carnet Nombre: Examen C++ Grupo A Informática II Fundamentos de Programación Prof. Dr. Paul Bustamante
Pág.1 Índice 1. INTRODUCCIÓN... 1 2. EJERCICIO 1: JUEGO DEL AHORCADO (3.5 PTS.)...1 3. EJERCICIO 2: AGENDA - CONTACTOS (5.5 PTS.)... 3 1. Introducción Algunas sugerencias con respecto al examen: verifique que tiene su Disco G:\ creado y que no tiene nada en él (ejercicios anteriores). Trate de realizar primero el ejercicio que crea que es más sencillo y deje el complicado para el final. Lea detenidamente los enunciados. 2. Ejercicio 1: Juego del ahorcado (3.5 Pts.) Este ejercicio consiste en hacer un programa que permita jugar al clásico juego del ahorcado, donde las palabras estarán grabadas en un fichero con extensión.txt, por ejemplo ahorcado.txt. Este fichero tiene que crearlo primero con un editor de texto (como notepad), y las palabras estarán una en cada línea, según se ve en la figura de la derecha (este fichero NO se debe crear con el programa que está UD. haciendo): El programa tendrá un menú con tres opciones: Cargar Palabra, Jugar y Salir, como se puede ver en la figura que se muestra a continuación: Opción 1: Mediante esta opción se puede cargar la palabra del fichero, cuyo nombre se pide por pantalla, según se ve en la figura anterior. Se debe seleccionar de forma aleatoria la palabra, para lo cual primero debe contar cuantas palabras hay en el fichero (leyéndolas) y luego mediante la función rand() (use srand() para cambiar la semilla) generar un número aleatorio entre 1 y el número de palabras que hay en el fichero (en la figura se ve que se ha cogido una palabra de 19 que tenía el fichero). Esta opción se debe hacer con la función CargaPalabra(..), la cual debe devolver la palabra escogida de forma aleatoria por el programa. Con el fin de continuar con el programa, sino puede hacer esta opción, use una palabra que se pida por teclado, pero perderá los puntos de esta opción. Opción 2: Esta opción permite empezar el juego (creo que es ya muy conocido este juego y no necesita mucha explicación). De esta opción no se sale hasta que haya adivinado la palabra o haya perdido (con 9 intentos). En cada intento de juego se va a pedir que introduzca un nuevo dígito y el programa debe ver si ese dígito está en la palabra o no. Los intentos se deben ir sumando, si el dígito no se encuentra en la palabra. Véase bien el funcionamiento del programa en la siguiente figura:
Pág.2 La estructura del programa principal main sería como sigue (debe usar las funciones que se muestran): void main() char pal[80]; //guardar aqui la palabra que devuelve CargaPalabra() while(1) int opc=menu(); if (opc==3)break; else if(opc==1) CargaPalabra(pal); Distribución de puntos: else if (opc==2) Jugar(pal); Cargar Palabra: 1.5 Jugar: 2.0 //se le pasa la palabra
Pág.3 3. Ejercicio 2: Agenda - Contactos (5.5 Pts.) Ud. forma parte de un grupo de trabajo en una empresa a la que le han pedido que realice un programa de una agenda, del estilo del outlook de Microsoft. El diagrama general de clases de dicho programa es el siguiente: La clase base es Agenda y de ella derivan todas las demás, como puede ver en la siguiente figura: A Ud. le han encargado que haga sólo la parte de los Contactos. Otros grupos de trabajo harán el resto de clases. Con el fin de poder juntar todo de la mejor manera posible, la clase Agenda no tiene variables miembro; sólo tiene una función virtual mostrarinfo(), que heredarán todas las demás clases. Esta clase sirve para poder crear una lista común a todos los objetos: Agenda Lista[40]; La estructura de la clase Agenda en la siguiente: class Agenda virtual void mostrarinfo(); ; La clase Contactos es la que realmente tiene todas variables y métodos necesarios para esto. A continuación se muestra la estructura de dicha clase: class Contactos : public Agenda Persona p; //objeto de clase Persona Empresa e; //objeto de clase Empresa char correo[20]; Contactos(); friend void operator>>(istream&ci, Contactos *c); void mostrarinfo(); ; //sobrecarga operador Con el fin de estructurar bien el programa, en la clase Contactos hay dos miembros de la clase Persona y de la clase Empresa, cuyas estructuras se dan a continuación. También hay otro miembro, correo, que es un array para guardar el email de los contactos:
Pág.4 Clase Persona class Persona char nombre[20]; //Apellido,nombre //direccion char dir[20]; long telf_fijo; long telf_movil; Persona() friend void operator>>(...) ; friend void operator<<(...); ; Clase Empresa class Empresa char nombre[15]; char puesto[20]; long telf; Empresa() ; friend void operator>>(... ); friend void operator<<(... ) ; Como puede ver, tanto la clase Persona como Empresa tienen sus propias variables miembro y tienen también los operadores sobrecargados (esto de la sobrecarga es opcional, lógicamente si se usan se obtendrá el puntaje total del ejercicio). Funcionamiento: El programa tiene 5 opciones. La opción 1 es para agregar nuevos contactos y su funcionamiento se puede ver en la siguiente figura. Aquí se deben pedir todos los datos de un contacto, esto es, nombre, dirección, tel.fijo, tel.movil, etc. La opción 2 permite ver todos los contactos que se han agregado. Para ello de debe invocar a la función mostrarinfo() de la clase contactos, y desde aquí se llamarán a los métodos respectivos de las clases Persona y Empresa.
Pág.5 Las opciones 3 y 4 permiten grabar y cargar los contactos que se creen en el programa. Esto se puede hacer con sobrecarga de operadores o con funciones sencillas. Debe pedir el nombre del fichero y ud. debe elegir si grabar en formato binario o texto. Los objetos cargados deben ser agregados a la lista para poder usar la opción 2 de ver todos los datos. A continuación se da la estructura general de main(): void main() Agenda *Lista[40]; int num=0; while(1) int opc=menu(); if (opc==5) break; else if(opc==1) //lista de objetos //contador de objetos Contactos *contact1=new Contactos(); cin >> contact1; //con sobrecarga. Lo puede cambiar si desea Lista[num++]=contact1; else if(opc==2) for (int i=0;i<num;i++) cout << "Contacto "<<i+1<<":\n"; Lista[i]->mostrarInfo(); //agregar el resto de opciones, grabar y leer Distribución de puntos: Agregar Contactos: 2.5 (debe tener todas las clases creadas para el total) Ver Contactos: 1.5 (si usa sobrecarga se obtiene el total) Opción 3 y 4: 1.5 (si usa sobrecarga se obtiene el total) Suerte!