Examen Junio Grupo A Programación en C++ Pág. 1 ÍNDICE ÍNDICE... 1 1. Introducción.... 1 1.1 Ejercicio 1: Estación Meteorológica (4.0 pts.)... 1 1.2 Ejercicio 2: Gestión Académica: Alumnos (5.0 pts.)... 3 1. Introducción. Para el examen es importante verificar que se escriben los ejercicios en el directorio correcto de su disco G:\. Debe crear un directorio para cada uno de los ejercicios. Lea detenidamente el enunciado del ejercicio, y si no lo comprende muy bien, pregunte a las personas encargadas de la vigilancia. Con el fin de evitar los errores acumulados, es conveniente que cada vez que agregue líneas de código, compile y ejecute el programa para ver que todo funciona bien. 1.1 Ejercicio 1: Estación Meteorológica (4.0 pts.) A Ud. le han encargado que haga un programa para introducir los datos de unos sensores de Temperatura y Humedad y así poder obtener algunas estadísticas diarias de lo que ocurre con el tiempo. Tales estadísticas pueden ser: Temperatura y Humedad media del día, Máximos y Mínimos de Temperatura y humedad, y la Desviación estándar de Temperatura y humedad. El programa debe ser lo más estructurado posible, por lo que hay que utilizar funciones para cada uno de los datos pedidos: media, máximos, mínimos y desviación estándar. A continuación se muestra la estructura del programa principal: void main() int opc; double temp[num],hum[num]; //Array para datos: Temp. y Humedad while(true) opc=menu(..) switch(opc) case 1: /* pedir todos los datos*/; break; case 2: /* pedir sólo 1 dato*; break; case 3: MostrarDatos(temp,hum); break; case 4: Estadisticas(temp,hum); break; case 5: /* Limpiar pantalla */ break; case 6: /* Fin del programa */; Debe usar dos array s (temp y hum) para almacenar los datos y poder trabajar con ellos. A cada una de las funciones se le pasan estos array como argumentos. En la Fig. 1 se muestran las distintas opciones del menú que debe salir por consola. A continuación se describen cada una de las opciones (y se detallan los ptos. asignados a cada una de éstas): Opción 1: Introducir los datos del día (1 por cada hora) de Temperatura y Humedad. Ver Fig.2 (0.75 ptos.).
Examen Junio Grupo A Programación en C++ Pág. 2 Opción 2: Permite introducir sólo los datos de una determinada hora (sirve en el supuesto caso de habernos equivocado en la Opción 1 al introducir los datos) 0.25 ptos. Opción 3: Permite mostrar los datos que hemos introducido en la consola. Ver Fig. 3. (0.75 ptos con formatos, tal como se ve en la figura) Opción 4: Estadísticas: esta es la opción donde habrá que introducir los algoritmos de cálculo para obtener los máximos y mínimos, los promedios y la desviación estándar. Ver Fig. 4. (2.0 ptos de la sgte. manera: Desv. Estándar:1.0 pto. Medias: 0.5 Max y Min:0.5) Opción 5: Limpiar la pantalla. Opción 6: Fin del programa (opción 5 y 6 0.25 ptos.) Fig. 1 Fig. 2 La fórmula de la Media es: Media = La fórmula de la desviación estándar es: n 1 i= 0 n x i σ = n 1 i= 0 ( x Media) i n 1 2 Debe observar que la Opción 4 tiene más puntos (2.0 ptos.) debido a los algoritmos que en ella se deben realizar.
Examen Junio Grupo A Programación en C++ Pág. 3 Fig. 4 Fig. 3 Este ejercicio se debe guardar en el subdirectorio Ejer1 de su disco G:\. 1.2 Ejercicio 2: Gestión Académica: Alumnos (5.0 pts.) Ud. forma parte de un grupo de programación y ha sido elegido para hacer una parte de un programa de gestión académica, la parte de introducción datos de Alumnos. El ejercicio consiste en introducir los datos personales de un alumno (Nombre y Apellidos y DNI) y los datos académicos del alumno (Número de carné y Asignaturas con nombre y Nota). La jerarquía de clases que se va a seguir para el programa es la siguiente: Persona Alumno? Existe una clase base, la clase Persona, que tiene los datos fundamentales de una persona (Nombre y Apellidos, DNI, etc.). Recuerde que esta clase servirá de base también para la otra parte del programa (que ud. no realizará). A continuación se describen las clases que intervienen: Clase base Persona: class Persona protected: long DNI; char *Name; //Nombre y Apellidos Persona(...); ~Persona();
Examen Junio Grupo A Programación en C++ Pág. 4 Con el fin de simplificar un poco el programa, la clase Persona sólo tiene 2 variables: long DNI: para almacenar el DNI de una persona char *name: para el nombre y apellidos. Clase derivada Alumno: Partiendo de la clase base Persona, tenemos que crear una nueva clase derivada, la clase Alumno, a la cual le vamos a agregar nuevas variables, como por ejemplo el carnet, numero de asignaturas y un puntero a Asignaturas (una nueva clase que más adelante explicaremos). Veamos la estructura de la clase Alumno: class Alumno: public Persona long carnet; int numasig; Asignatura *asig; //para crear un vector dinámico de asignaturas Alumno(...); ~Alumno(); La clase Asignatura es una clase que tiene sólo dos variables: el nombre de la asignatura y el nombre. Veamos cómo es dicha clase: class Asignatura char *Name; double Nota; Asignatura(...); ~Asignatura(); NOTA: Para todas las clases, Ud. debe poner los constructores y destructores según mejor le convenga. También puede agregar las funciones que necesite. Función Principal main(): Desde main tenemos que crear los objetos y destruirlos, para lo cual se tiene que desplegar un menú con las siguientes opciones (1 pto): Fig. 5 Fig. 6 La Opción 2 permite introducir los datos de un nuevo alumno (ver Fig. 6). Observe que el programa primero pide los datos del alumno y el número de asignaturas y luego pide el nombre y la nota de cada una de las asignaturas. (1.5 puntos)
Examen Junio Grupo A Programación en C++ Pág. 5 La Opción 3 permite mostrar por consola los datos introducidos de los alumnos. Observe que al final de cada alumno, saca la nota media del alumno (esto se puede hacer en una función miembro de la clase Alumno) (1.5 puntos). En la siguiente figura se puede ver cómo será la salida por consola: Fig. 7 La Opción 4 permite limpiar la pantalla, esto es, borrar todo y volver a poner sólo el menú. La Opción 5 permite grabar en un fichero en formato texto los datos introducidos (tal como aparecen en la consola). Esta opción tiene un peso de 1.0 punto. Si utiliza sobrecarga de operadores para pedir datos y sacarlos por consola, tendrá un 0.5 puntos adicionales a los 5.0 puntos de este ejercicio. Recuerde que en main debe crear los objetos Alumno de forma dinámica (con new) y agregarlo a alguna lista que tenga (queda a su criterio hacerlo de la forma que más le convenga).