ExSept

Anuncio
Examen Septiembre – Curso 2001-2002 -- Programación en C++
Pág. 1
ÍNDICE
ÍNDICE ................................................................................................................................................ 1
1.1
Ejercicio 1: Convertidor Dec->Hex y Hex->Dec (5.0 ptos.) .......................................... 1
1.1.1
Apartado A (4.0 ptos.)............................................................................................. 1
1.1.2
Apartado B (1.0 pto.) .............................................................................................. 2
1.2
Ejercicio 2: Tienda de Alquiler de Videos (5.0 ptos.) .................................................... 3
Antes de empezar a desarrollar los ejercicios del examen, es conveniente que revises que tienes
creado tu disco G:\. En él vas a poner todos los ejercicios. Lee atentamente las indicaciones del
ejercicio y debes hacer los programas conforme se te indica en este cuadernillo, es decir, si te dicen
que desarrolles el programa con 3 funciones, debes hacerlo así; si dice que las variables de las
clases deben ser privadas, así debes declararlas.
1.1 Ejercicio 1: Convertidor Dec->Hex y Hex->Dec
(5.0 ptos.)
Para empezar a hacer este ejercicio, crea el Proyecto Convertidor en tu disco G:\ y en él crea el
fichero convertidor.cpp, que es donde vas a escribir el código del ejercicio.
1.1.1 Apartado A (4.0 ptos.)
Este ejercicio consiste en hacer un programa que convierta un número entero de decimal a
hexadecimal y viceversa, dependiendo de la opción elegida.
A continuación daremos las características del funcionamiento del programa:
•
En primer lugar debe aparecer un menú pidiendo que se elija la opción, según se
puede ver en la Fig. 1. El programa termina con la opción 3.
•
Si elige la opción 1, el usuario debe introducir un número entero en decimal (por
ejemplo 200) y como resultado el programa debe sacar por consola su equivalencia
en Hexadecimal (en nuestro ejemplo es C8). Ver Fig. 2 para más detalles.
Fig. 1
Fig. 2
•
Fig. 3
Si elige la opción 2, el usuario debe introducir un número entero en hexadecimal (en
mayúscula o minúsculas, por ejemplo 8C2A ó 8c2a) y como resultado el programa
sacará por consola su equivalencia en decimal (en nuestro caso 35882). Ver Fig. 3.
Informática II – Fundamentos de Programación – TECNUN – Universidad de Navarra
Examen Septiembre – Curso 2001-2002 -- Programación en C++
Pág. 2
Funciones y variables del programa:
El programa tendrá en main() dos variables para los cálculos:
1. int numDec
2. char numHex[255]
Estas variables deben ser pasadas a las funciones que se encargarán de los algoritmos. NO
DEBEN ser variables globales.
En cuanto a las funciones del algoritmo serán dos, las cuales deben ser llamadas desde main():
1. tipo ConvDecToHex( argumentos ..): convierte de decimal a hexadecimal.
2. tipo ConvHexToDec( argumentos ..): convierte de hexadecimal a decimal.
Estas funciones harán el calculo respectivo y DEBEN RETORNAR a main() el resultado, el
cual se imprimirá desde alli.
A continuación se muestra el esqueleto de lo que debe ser la función main():
void main()
{
//.. definicion de array’s y variables necesarias
while(true){
int opc=Menu();
switch(opc){
case 1: //pedir datos al usuario
ConvDecToHex(...);
//Imprime resultado en consola
break;
case 2: //pedir datos al usuario
ConvHexToDec(...);
//Imprime resultado en consola
break;
case 3: exit(0);
}
}
}
La distribución de los puntos de este apartado es de 2.0 ptos. para cada función.
1.1.2 Apartado B (1.0 pto.)
En este apartado hay que agregarle al programa la opción de poder ejecutarlo desde la consola
pasándole 2 argumentos, donde:
•
•
Primer argumento será una “d” o “h”: indica que el número que se pasará como
segundo argumento es decimal o hexadecimal, por lo tanto tiene que convertirlo al
otro formato.
Segundo argumento será el número a convertir, dependiendo del primer argumento.
En la Fig. 4 y Fig. 5 vemos el resultado de la ejecución desde la consola con los dos argumentos
“d” y “h”.
Fig. 4
Fig. 5
Informática II – Fundamentos de Programación – TECNUN – Universidad de Navarra
Examen Septiembre – Curso 2001-2002 -- Programación en C++
Pág. 3
Si ejecutamos el programa sin ningún argumento (ver Fig. 6), pasa a funcionar como en el
apartado A, es decir, mostrará el menú y pide la opción a elegir.
Fig. 6
El punto de este apartado se puede lograr también si solo se ha hecho una función, es decir que
convierta sólo de decimal a hexadecimal o viceversa. Lógicamente si se ha hecho sólo una función,
no se tendrán los 4 puntos del apartado A, sino solo 2.
Como ayuda, recordar que un número hexadecimal está en base 16, esto quiere decir que
necesitamos 16 dígitos para expresarlo, lo cual se logra tomando los dígitos A,B,C,D,E y F, que
vendrían a ser el 10,11,12,13,14 y 15 respectivamente. Debido a esto es necesario utilizar un array
de caracteres para almacenar el número en hexadecimal; en cambio el número en decimal se logra
almacenar en una variable tipo int.
Dec->Hex: Dividir el número en decimal por 16 hasta que el resultado sea menor que 16, e ir
tomando el resto de cada división. Como el resto puede ser mayor que 10, tomar su equivalencia en
el dígito correspondiente (10=A, B=11, etc..).
Hex->Dec: Para este algoritmo hay que desarrollar la siguiente serie:
num
∑ Coef *16
i
i =0
Por ejemplo, convertir el número 8C4 a decimal: 2244 = 4 * 16 0 + C * 161 + 8 *16 2 donde C=12.
Te recuerdo algunas funciones que puedes usar: pow(..), log10(..), atoi(..), atof(..), itoa(..)
1.2 Ejercicio 2: Tienda de Alquiler de Videos
(5.0 ptos.)
Para este ejercicio debes crear un proyecto nuevo Tienda y los siguientes ficheros (si están en un
solo fichero se descontarán puntos):
•
Fichero Tienda.cpp para escribir sólo la función main()
•
Ficheros Video.cpp y Video.h para la clase Video.
•
Ficheros Dvd.cpp y Dvd.h para la clase Dvd.
•
Ficheros Vhs.cpp y Vhs.h para la clase Vhs.
El ejercicio consiste en hacer un programa para una Tienda de Alquiler de Videos. La clase base se
llamará Video y las clases derivadas serán Dvd y Vhs. La jerarquía de clases que debes seguir es la
siguiente:
Video
Dvd
Vhs
Informática II – Fundamentos de Programación – TECNUN – Universidad de Navarra
Examen Septiembre – Curso 2001-2002 -- Programación en C++
Pág. 4
A continuación vamos a describir las variables miembro que deben tener las clases:
a. Clase Video: Tendrá las siguientes variables miembro privadas (fichero Video.h):
class Video
{
private:
char *titulo;
//Titulo del video
int categoria;
//1:accion 2:drama 3:comedia 4:infantil 5:otra
double duracion;
//minutos de duración del video
long codigo;
//codigo del video (codigo de barras)
bool alquilado;
//variable para marcar cuando se alquila
public:
// constructor, destructor y demás funciones
- El constructor de esta clase NO tendrá argumentos y lo único que hará será inicializar la
variable alquilado a false, para que al inicio no esté alquilado el Video (Dvd o Vhs).
- Esta clase debe definir la función void Display() para mostrar por pantalla los datos del
Video (titulo, duración, categoría, codigo y si está alquilado o no). Debe ser o no virtual
esta función? Queda a criterio del alumno.
- También queda a criterio del alumno ver si esta clase necesita o no destructor (virtual?) y
qué otras funciones necesita (para acceder a las variables privadas).
b. clase Dvd: Esta clase tiene 4 variables miembro, 3 privadas y 1 publica:
1) Variables Privadas:
i. static double precio: se inicializará en main() sólo una vez con el precio del
alquiler del Dvd (1.25 euros). Es una sola para todos los objetos.
ii. char *idiomas: Para los idiomas del audio del dvd (ingles, frances, español, etc.)
iii. char *subtitulos: Para los subtítulos del dvd (ingles, frances, español, etc.)
2) Variable Publica: static int numDvs: será una sola variable para todos los objetos, y
en ella se irán contando los Dvds que se vayan ingresando en la base.
-
El constructor de esta clase NO tendrá argumentos y sólo se encargará de ir
contando los Dvd’s que se vayan ingresando.
Esta clase debe redefinir la función void Display() para sacar la información por la
consola: además de la información que debe sacar la misma función en la clase base,
debe sacar los idiomas del audio, los subtítulos y el precio del alquiler.
A continuación se parte del código de la clase Dvd (fichero Dvd.h):
class Dvd: public Video
{
private:
char *idiomas;
//idiomas
char *subtitulos;
//subtitulos
static double precio;
public:
static int numDvds;
public:
//constructor, destructor y funciones
void Display();
friend istream &operator<<(istream &ci, Dvd *dv);
// ... demás funciones necesarias
NOTA: Los datos se deben pedir a través del operador de inserción (“<<”)
sobrecargado, de tal forma que se pueda hacer algo así en main():
Informática II – Fundamentos de Programación – TECNUN – Universidad de Navarra
Examen Septiembre – Curso 2001-2002 -- Programación en C++
Pág. 5
Dvd *d1 = new Dvd;
cin << d1;
// Despues copiar d1 a la lista
c. Clase Vhs: Esta clase tiene 3 variables miembro, 2 privadas y 1 publica:
1) Variables Privadas:
i. static double precio: se inicializará en main() sólo una vez con el precio del
alquiler del Vhs (1.00 euros). Es una sola para todos los objetos.
ii. int idioma: Poner el idioma del Vhs (1:ingles, 2:frances, 3:español, 4:Italiano
y 5:Otro.). Recordar que los Vhs sólo vienen en un idioma.
2) Variable Publica: static int numVhs: será una sola variable para todos los objetos, y
en ella se irán contando los Vhs que se vayan ingresando en la base.
-
El constructor de esta clase NO tendrá argumentos y sólo se encargará de ir
contando los Vhs’s que se vayan ingresando.
NOTA: Al igual que la clase Dvd, los datos se deben pedir a través del operador de
inserción (“<<”) sobrecargado, de tal forma que se pueda hacer algo así en main():
Vhs *v1 = new Vhs;
cin << v1;
// Despues copiar v1 a la lista
Esta clase también debe redefinir la función void Display() para sacar la información por
la consola: además de la información que debe sacar la misma función en la clase base,
debe sacar el idioma del Vhs y el precio del alquiler.
A continuación se pone parte de la definición de la clase Vhs (fichero Vhs.h):
class Vhs: public Video
{
private:
int idioma;
//1:Ing 2:Español 3:Fran 4:Ital 5:Otro
static double precio;
public:
static int numVhs;
public:
//constructor, destructor y funciones
Vhs(){ . . .}
~Vhs(){ . . . }
void Display();
friend istream &operator<<(istream &ci, Vhs *dv);
//.. demas funciones necesarias
};
d. Programa principal main(): En el programa principal debe haber un menú con 5 opciones
(ver Fig. 7), las cuales pasamos a describir a continuación:
1) Ingresar Video: Mediante esta opción se ingresan los videos nuevos en la base de
datos. Al inicio del programa no hay ningún video. Después de seleccionar esta
opción, el programa pedirá elegir si es Dvd o Vhs? lo que se va a ingresar,
inmediatamente después pide los datos del Video: Titulo, Duración, Código (unico,
como si fuese un código de barras), Categoría, Idiomas (y subtítulos si se trata de un
Dvd). En la Fig. 8 hemos pedido ingresar un Dvd (cada vez que aparecer el signo
“?” significa que pide datos al usuario). Si hubiésemos elegido ingresar un Vhs nos
Informática II – Fundamentos de Programación – TECNUN – Universidad de Navarra
Examen Septiembre – Curso 2001-2002 -- Programación en C++
Pág. 6
hubiese pedido los datos necesarios para el Vhs (Titulo, Duración, Codigo, Categoría
y el Idioma).
2) Alquilar Video: Para alquilar un video es conveniente hacer primero un listado para
ver los videos disponibles, así como los códigos y si están o no alquilados (vea la
opción 4, listado de videos). En la Fig. 9 se puede ver cómo se debe hacer un
alquiler: el programa pide el código del Video (sea Dvd o Vhs) y a continuación lo
busca y si encuentra el código, lo alquila (pone la variable alquilado a true) y saca
por pantalla los datos del vídeo alquilado. Si no encuentra el vídeo o esta alquilado,
debe sacar un mensaje de error por la pantalla.
3) Devolución de un video: Pedirá el código del video que desea devolver y pondrá la
variable alquilado a false. Si no existe el código o ese video no está alquilado,
deberá sacar un mensaje de error por la pantalla.
4) Listado de Videos: Esta opción sacará por consola el Número de Dvd’s y Vhs’s que
hay y luego el listado de cada uno de ellos( ver Fig. 9, se han introducido 2
introducido 2 Dvd’s y 1 Vhs. Como se puede ver, 2 no están alquilados y 1 si).
5) Salir: Termina el programa.
Fig. 7
Fig. 8
Opción 2: Alquiler de Video
Opción 4: Listado de Videos
Fig. 9
Informática II – Fundamentos de Programación – TECNUN – Universidad de Navarra
Examen Septiembre – Curso 2001-2002 -- Programación en C++
Pág. 7
En main() se tiene que crear un vector de punteros a la clase base Video para ir
almacenando todos los nuevos objetos creados, de tal forma que cuando queremos imprimir la lista
se puede hacer con un simple for.
A continuación (fichero Tienda.cpp) se muestra el esqueleto de lo que sería la función
main( ):
//inicializar variables static de las clases
#define MAX 100
void main()
{
Video *lista[MAX];
//Vector de punteros
While(true){
//hacer Menú
// 1. Ingresar Video\n
// 2. Alquilar Video\n
// 3. Devolucion\n
// 4. Listado de Videos\n
// 5. Salir\n
//según la opcion elegida, poner el código correspond.
} //solo se sale del while por la opcion 5
NOTA: Leer bien lo que se pide en cada una de las opciones del menú. Si el alumno
necesita crear nuevas funciones, aparte de las que se han dicho, puede hacerlo con total libertad.
La evaluación de este ejercicio se hará de la siguiente manera:
-
Clase Video:
1.25
-
Clase Dvd:
1.25
-
Clase Vhs:
1.25
-
main ( que realice las opciones del menú): 1.25
Informática II – Fundamentos de Programación – TECNUN – Universidad de Navarra
Descargar