Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: bigfu en 10 Septiembre 2011, 16:45 pm



Título: Ayuda con un ejercicio en C++
Publicado por: bigfu en 10 Septiembre 2011, 16:45 pm
Hola, os pongo el enunciado:
Citar
Se pretende informatizar la gestión de una hemeroteca. Esta cuenta con cuatro tipos de revistas según la información que contiene: técnica, económica, humanística y ocio. Se calcula que de cada tipo de revista la hemeroteca tendrá un máximo de 500 unidades. El tipo de revista deberá ser definido como un enumerado. De cada revista se ha de almacenar la siguiente información: Nombre de la revista, ISSN (cadena de al menos 10 caracteres) y editorial.
Por otra parte, de cada revista también se desea mantener información de todos los ejemplares que de ella están almacenadas en la hemeroteca. Las características de cada ejemplar son: volumen, fecha de publicación, número de artículos y nombres de los autores de la revista (como máximo habrá 10). Suponemos que cada revista puede tener un máximo de 100 ejemplares. Se pide:
a) Define los tipos de datos TRevista, TEjemplar y THemeroteca. Usa tipos enumerados siempre que sea posible.
b) Implementa un subalgoritmo para inicializar la estructura de tipo THemeroteca.
c) Dados una revista y su tipo, implementa un subalgoritmo para darla de alta en la estructura. En caso de que no haya sitio libre en la estructura se dará el correspondiente error.
d) Dados un ejemplar de revista y el ISSN de la revista a la qu ecorresponde dicho ejemplar, implementa un subalgoritmo para dar de alta dicho ejemplar. En caso de no haber sitio libre en la estructura se dará el correspondiente error.
e) Implementa un subalgoritmo que, dados un tipo de revista y un mes y un año, devuelva el número de ejemplares almacenados de ese tipo de revista y cuya fecha de publicación es posterior a la fecha indicada por dicho mes y año.
f) Implementa un subalgoritmo que dado el ISSN de una revista muestre toda la información almacenada en la estructura relativa a dicha revista y sus ejemplares. En caso de no existir dicha revista, se dará el correspondiente mensaje de error.

Con este tipo de ejercicios siempre he tenido "problemas" con la definición de los tipos, ya que me cuesta un poco el definirlos.
He hecho el apartado a), pero como os acabo de decir, siempre me ha costado un poco este tipo de ejercicios y al no tener la solución del ejercico, estoy muy inseguro con la forma en la que lo he resuelto.
Me preguntaba si podríais echarle un vistazo e indicarme si algo está mal o darme algún consejo sobre la solución.

He de decir, que este ejercicio es algo antiguo y está diseñado para resolverlo a mano y en pseudocódigo, pero la asignatura este año se da en C++ y he modificado la solución acorde a lo que se ha visto en la asignatura (son muy muy parecidas).

Código
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. const unsigned MAX_TIPOS = 4;
  6. enum TInformacion{tecnica,economica,humanistica,ocio};
  7. const unsigned AUTORES = 10;
  8. typedef string TAutores[AUTORES];
  9. struct TNumAutores{
  10.   TAutores a;
  11.   unsigned num;
  12. };
  13. struct TEjemplar{
  14.   unsigned volumen, num_art;
  15.   string fecha_p;
  16.   TNumAutores num_a;
  17. };
  18. const unsigned MAX_EJEMPLARES = 100;
  19. typedef TEjemplar TEjemplares[MAX_EJEMPLARES];
  20. struct TNumEjemplares{
  21.   TEjemplares e;
  22.   unsigned num;
  23. };
  24. struct TRevista{
  25.   string nombre, ISSN, editorial;
  26.   TNumEjemplares ejemplares;
  27. };
  28. const unsigned MAX_UNIDADES = 500;
  29. typedef TRevista TUnidades[MAX_UNIDADES];
  30. struct TNumUnidades{
  31.   TUnidades n;
  32.   unsigned num;
  33. };
  34. typedef TNumUnidades TArray[MAX_TIPOS];
  35. struct TNumArray{
  36.   TArray a;
  37.   unsigned num;
  38. };
  39. struct THemeroteca{
  40.   TInformacion info;
  41.   TNumArray num;
  42. };

Muchísimas gracias de antemano  :D


Título: Re: Ayuda con un ejercicio en C++
Publicado por: bigfu en 10 Septiembre 2011, 17:34 pm
He seguido con los demás apartados y creo que tengo mal los últimos registros. A ver si consigo modificarlo...

EDIT: Aqui os dejo el código modificado, a ver si podéis echarme un cable, que tengo el miércoles el examen y estoy acojonao XDD

Código
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. const unsigned MAX_TIPOS = 4;
  6. enum TInformacion{tecnica,economica,humanistica,ocio};
  7. const unsigned AUTORES = 10;
  8. typedef string TAutores[AUTORES];
  9. struct TNumAutores{
  10.   TAutores a;
  11.   unsigned num;
  12. };
  13. struct TEjemplar{
  14.   unsigned volumen, num_art;
  15.   string fecha_p;
  16.   TNumAutores num_a;
  17. };
  18. const unsigned MAX_EJEMPLARES = 100;
  19. typedef TEjemplar TEjemplares[MAX_EJEMPLARES];
  20. struct TNumEjemplares{
  21.   TEjemplares e;
  22.   unsigned num;
  23. };
  24. struct TRevista{
  25.   string nombre, ISSN, editorial;
  26.   TNumEjemplares ejemplares;
  27. };
  28. const unsigned MAX_UNIDADES = 500;
  29. typedef TRevista TUnidades[MAX_UNIDADES];
  30. struct TNumUnidades{
  31.   TUnidades n;
  32.   unsigned num;
  33. };
  34. typedef TNumUnidades TArray[MAX_TIPOS];
  35. struct THemeroteca{
  36.   TInformacion info;
  37.   TArray a;
  38.   unsigned num;
  39. };

Aunque no me sirve de mucho el campo info en THemeroteca, lo pongo para convertirlo a número e introducirlo en la correspondiente celda del array.

Gracias!!