Carné: Nombre: Informática II Fundamentos de Programación Prof. Dr. Paul Bustamante
INDICE 1. INTRODUCCIÓN... 1 Pag.1 1.1 EJERCICIO1: CÁLCULO DEL IMC (3.0 PTS.)... 1 1.2 EJERCICIO2: OPERADOR VIRTUAL DE VOIP (6.0 PTS)... 3 1. Introducción Recuerde que la revisión del examen será el día 25 de Junio, de 10:30 a 14:00, en el despacho E-08 del edificio del CIT. Debe leer cuidadosamente los enunciados de los ejercicios, y si no le queda claro lo que se pide, por favor pregunte a los profesores encargados. 1.1 Ejercicio1: Cálculo del IMC (3.0 Pts.) El Índice de Masa Corporal (IMC) es un índice del peso de una persona en relación con su altura. A pesar de que no hace distinción entre los componentes grasos y no grasos de la masa corporal total, éste es el método más práctico para evaluar el grado de riesgo asociado con la obesidad. La fórmula del IMC es muy sencilla: IMC = Peso / Altura^2, donde el peso debe estar en kilos y la altura en metros. Ud. debe hacer un programa que tenga las siguientes opciones: Opción1: Debe calcular el IMC de una persona, pidiendo el peso y la altura. Como resultado, debe mostrar por consola el IMC y una sugerencia, de acuerdo a la siguiente tabla: IMC Salida por Consola < 20 Falto de Peso. Tome Vitaminas 20 25 Normal. 25-30 Ligero sobrepeso. Haga ejercicios. > 30 Debe visitar a un médico En las siguientes figuras puede ver lo que debe hacer el programa en la Opción 1: Opción 2: En esta opción debe hacer una tabla de los IMC s, para unos pesos y unas alturas determinadas, de tal forma que cada persona pueda buscar rápidamente en dicha tabla su peso y su altura, y así encontrar su IMC. El programa, en esta opción, debe pedir el peso Inicial, peso final, y el incremento de peso, y la altura inicial, altura final y el incremento de altura que se quiere utilizar. Vea a continuación lo que sería la tabla. (En la columna de la
Pag.2 izquierda van los pesos y en la fila inicial van las alturas. Por ejemplo para un peso de 70 kilos y una altura de 1.65 le corresponde un IMC de 25.7 ). Opción 3: Mediante esta opción debe grabar la tabla anterior en un fichero de texto, de tal forma que luego se pueda imprimir con cualquier editor de textos, para lo cual debe pedir el nombre del fichero. Para la resolución de este ejercicio, debe crear tres funciones: Debe hacer una función que reciba como argumentos el peso y la altura y devuelva el IMC, de tal forma que dicha función pueda ser llamada desde cualquier sitio del programa (otras funciones). Su prototipo debe ser el siguiente: double IMC( double peso, double altura) ; Debe hacer una función para calcular el IMC, que será llamada desde main() cuando se elija la Opción 1, la cual saque por consola el texto correspondiente al IMC (Normal, falto de peso, etc.). Su prototipo debe ser así: void Calcular_IMC(); Debe hacer una función para sacar la Tabla del IMC por consola. Esta función será llamada desde main() cuando se elija la Opción 2. Su prototipo debe ser así: void TablaIMC(); Por último, debe hacer una función para grabar la Tabla del IMC a un fichero. Esta función será llamada desde main() cuando se elija la Opción 3. Su prototipo debe ser así: void GrabaTablaIMC();
Pag.3 1.2 Ejercicio2: Operador Virtual de VoIP (6.0 Pts) Un operador virtual de telefonía de VoIP (Voz sobre IP) le ha pedido que le haga un programa para gestionar las llamadas de sus clientes, para lo cual ud. debe elegir la mejor oferta que tenga entre todos los operadores. Para esto debe introducir en el programa los Operadores con sus respectivas tarifas, según el tipo de servicio: Nacional, Internacional o entre PC s. Por ejemplo, Ud. puede tener un operador que ofrezca mejor tarifa para las llamadas nacionales y otro operador para las internacionales. En las siguientes figuras puede ver el menú del programa y a continuación se explicarán las opciones de dicho menú. Opción 1 (1.5 pto), donde se Introducen los datos de un OperadorVoIP (en las figuras por ejemplo está Skype y YahooVoz). Hay que introducir el número de servicios que ofrece. Si es 3, será nacional, internacional y entre PC s, si es menor de 3, tiene que decir luego cuáles son y sus respectivas tarifas en céntimos de uros/minuto (Por ejmplo puede ver en la figura de la opción 2 que el operador VoIPBluster ofrece sólo 1 servicio, que son las llamadas entre PC s). Se podrán introducir hasta un máximo de 10 operadores (Aquí debe crear los objetos de la clase OperadorVoIP que verá más adelante). Opción 2(0.75 pto): Mediante esta opción se podrán visualizar los operadores introducidos en el programa. En el caso del ejemplo, podéis ver a Skype, YahooVoz y VoIPBluster, con sus respectivos servicios que ofrecen (Nacional, Internacional o entre PC s) y el precio en céntimos por minuto.
Pag.4 Opción 3 (1.0 pto): Mediante esta opción se podrá realizar las llamadas. El programa debe pedir el tipo de llamada a realizar (Nacional, Internacional o entre PC s), el teléfono y la duración de la llamada. Esto servirá para que el programa elija el mejor operador, según el precio que ofrezca. (Aquí debe crear los objetos de la clase Call que verá más adelante). Opción 4 (2.0 pts.): Se imprimirá por consola la lista de las llamadas realizadas, imprimiendo el teléfono, los minutos de duración, el tipo de llamada, el operador seleccionado y el costo total de esa llamada (igual a precio*duración). Al final de toda la lista de llamadas, se debe mostrar el Total (en uros) gastado. En la figura siguiente se muestra lo que debe salir por la consola. Aquí debe hacer un pequeño algoritmo para detectar la mejor tarifa que ofrecen los operadores de VoIP según el tipo de llamada (Nacional, Internacional o entre PC s). En el ejemplo de la figura puede ver que se han seleccionado los 3 operadores, por que cada uno ofrece una mejor tarifa según el tipo de llamada. Opción 5 (0.75 pto): Esta opción grabará en un fichero la factura, es decir prácticamente lo mismo de la opción 4. Debe pedir el nombre del fichero donde grabar en modo texto.
Pag.5 Clases: A continuación se describirán las clases a utilizar para el desarrollo del programa. class Call { char Telefono[15]; double duracion; int tipo; //0:Nac 1:Inter 2:PC's public: Call(); //agregar funciones }; class Servicio { double precio; int tipo; //0:Nac 1:Inter 2:PC's public: Servicio(){} //agregar funciones }; class OperadorVoIP { char name[15]; Servicio *voz; int numser; //num de servicios public: OperadorVoIP(); //agregar funciones }; Esta clase tiene 3 variable privadas: Telefono, duración y tipo, para almacenar el número de teléfono, la duración y el tipo de llamada a realizar (0:Nac, 1:Internacional y 2: Entre PC s). Puede crear los constructores que necesite, así como las funciones que le haga falta. En main() debe ir creando objetos de esta clase Call por cada llamada que desee realizar (opción 3 del menú). Esta clase tiene 2 variables privadas: precio, para fijar el precio del servicio a ofrecer, y tipo que servirá para identificar que el precio que se pone a qué tipo de servicio pertenece (0:Nac, 1:Internacional y 2: Entre PC s). Puede crear los constructores que necesite, así como las funciones que le haga falta. Esta clase se usará en la clase OperadorVoIP, que veremos a continuación. Esta clase tiene 3 variables privadas: name, para poner el nombre del operador (por ej. Skype, YahooVoz, etc), voz, que es un puntero de objetos de la clase Servicio y numserv que almacenará el número de servicios creados (sirve para crear los objetos de la clase Servicio, por medio del puntero voz). Cuando vaya a crear un Operador, debe pedir cuántos servicios va a ofrecer el operador, y según ese dato, crear el vector voz, de la siguiente forma: voz = new Servicio[ numser]; Puede crear los constructores que necesite, así como las funciones que le haga falta. En main() debe ir creando objetos de la clase OperadorVoIP por cada Operador que desee introducir (opción 1 del menú). En main() debe hacer el menú e implementar la opciones como mejor le parezca, ya sea a través de funciones o directamente. En las opciones 1 y 3 debe crear los objetos de Operador o Call, respectivamente, e introducirlos en una lista, por lo que debe tener dos listas, como las sgtes.: Operador *LstOp[10]; Call *LstCall[50]; NOTA: Si usa la sobrecarga de operadores, tendrá como opcional 0.5 puntos en esta pregunta. Suerte!!! * Los datos de precios puestos en el ejemplo, según los operadores, sólo son ilustrativos y no tienen porqué coincidir con la realidad.