Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: JesusIII en 21 Abril 2016, 13:44 pm



Título: Colas en C++
Publicado por: JesusIII en 21 Abril 2016, 13:44 pm
Hola, hace poco que me han enseñado el tema de las colas y ahora tengo que hacer una practica. Se hacer las funciones del tipo: "encolar","imprimir"...

Hasta ahora he hecho colas simples en las clases prácticas, pero esta última no se ni por donde empezar. El enunciado empieza así:

En dicha ITV existirán 4 colas para diferentes tipos de vehículos:
- Gasolina (vehículos de gasolina)
- Diesel (vehículos diesel no industriales)
- Motos
- Industriales

Cada segundo de ejecución, que representará 10 minutos de tiempo real,
llegará un vehículo a la ITV. Dicho vehículo tendrá una serie de datos que
habrá que guardar: matrícula, marca, modelo, potencia, tipo (G,D,M,I),
hora_llegada, hora_salida, fecha, estado_ITV… Los datos se podrán
generar aleatoriamente.

¿Como empiezo? Gracias de antemano.


Título: Re: Colas en C++
Publicado por: ivancea96 en 21 Abril 2016, 13:59 pm
Pues podrías hacer una clase o estructura para guardar los datos de cada coche.
Luego, hacer 4 colas que almacenen datos de la clase o estructura mencionada.

Y finalmente, ir generando coches, y meténdolos en cada cola.


Título: Re: Colas en C++
Publicado por: HardForo en 21 Abril 2016, 14:06 pm
Cada tipo de vehiculo queda encolado aparte porque requeririan distinto combustible y/o condiciones especiales o sea.... tienes 4 tipos de vehiculos = colas, te explico:

Dentro de un bucle infinito del tipo while(true) tienes una funcion que genera vehiculos al azar con distintas caracteristicas (matrícula, marca, modelo, potencia, tipo,
hora_llegada, hora_salida, fecha, estado_ITV..) que puedes guardar en un objeto o struct Vehiculo. Digamos se generan asi:

moto, Yamaha, modelo......, potencia 200 cm3,....
moto,....,....
moto,....,....
moto,....,....
moto,....,....
moto,....,....
moto,....,....
vehiculo a gasolina, Ford, modelo T, ......
vehiculo diesel no-industrial
vehiculo diesel industrial
moto
...


El primero que generas tienes que atenderlo primero......... por eso usas una cola pero dentro de su categoria porque no puedes atender una moto más si tienes 20 encoladas (se asume que se puede atender 1 tipo de vehiculo a la vez y no mas)

Entonces.....

Verificas si la cola correspondiente (motos por ejemplo) esta vacia.. y si lo esta atiendes a ese vehiculo (moto). Sino esta vacia, atiendes al que espera en la cola y encolas al recien llegado.  Algo asi:

Código
  1. #include <queue>
  2. #include <stdexcept>
  3. #include <stdlib.h>  // srand, rand
  4. #include <iostream>
  5. #include <string>
  6. #include <time.h>
  7.  
  8. using namespace std;
  9.  
  10. const unsigned short int G = 0;
  11. const unsigned short int D = 1;
  12. const unsigned short int M = 2;
  13. const unsigned short int I = 3;
  14.  
  15. struct Vehicle{
  16. int matricula; // según tu país puede ser numerico o no
  17. string marca;
  18. string modelo;
  19. short unsigned int potencia;
  20. //enum tipo {G, D, M, I};
  21. unsigned short int tipo;
  22. tm hora_llegada;
  23. tm hora_salida;
  24. tm fecha;
  25. enum estado_ITV {BUENO, MALO, REGULAR};
  26. };
  27.  
  28. void atender(Vehicle v);
  29. Vehicle GeneraVehiculo();
  30. void sleep(unsigned int mseconds);
  31.  
  32. int main(){
  33.  
  34. Vehicle v,vc;
  35. queue<Vehicle> colas[4];
  36.  
  37. while(true)
  38. {
  39.  
  40. v = GeneraVehiculo();
  41. printf ("Ingresa vehiculo (tipo %d) de matricula %d\n",v.tipo,v.matricula);
  42.  
  43. if (colas[v.tipo].empty())
  44. atender(v);
  45. else
  46. {
  47. // atiendo a quien espera en cola
  48. vc = colas[(int)v.tipo].front();
  49. colas[(int)v.tipo].pop();
  50. atender(vc);  
  51. colas[(int)v.tipo].push(v); // encolo al recien llegado
  52. }
  53. }
  54. return 0;
  55.  
  56. }
  57.  
  58.  
  59. void sleep(unsigned int mseconds)
  60. {
  61.    clock_t goal = mseconds + clock();
  62.    while (goal > clock());
  63. }  
  64.  


Te dejo la tarea de implementar GeneraVehiculo() y atender()


Título: Re: Colas en C++
Publicado por: JesusIII en 21 Abril 2016, 14:23 pm
Gracias por la ayuda, enserio. Pero he olvidado mencionar que el profesor a prohibido usar librerías de colas.


Título: Re: Colas en C++
Publicado por: HardForo en 21 Abril 2016, 14:29 pm
La logica es la misma....... o acaso piensas implementar una cola que no tenga un push(), pop() o un empty() ? 

Debes fijarte que metodos de minima necesitas e implementarlos.......