Colas en C++

Iniciado por JesusIII, 21 Abril 2016, 13:44 PM

0 Miembros y 1 Visitante están viendo este tema.

JesusIII

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.

ivancea96

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.

HardForo

#2
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 (cpp) [Seleccionar]

#include <queue>
#include <stdexcept>
#include <stdlib.h>  // srand, rand
#include <iostream>
#include <string>
#include <time.h>

using namespace std;

const unsigned short int G = 0;
const unsigned short int D = 1;
const unsigned short int M = 2;
const unsigned short int I = 3;

struct Vehicle{
int matricula; // según tu país puede ser numerico o no
string marca;
string modelo;
short unsigned int potencia;
//enum tipo {G, D, M, I};
unsigned short int tipo;
tm hora_llegada;
tm hora_salida;
tm fecha;
enum estado_ITV {BUENO, MALO, REGULAR};
};

void atender(Vehicle v);
Vehicle GeneraVehiculo();
void sleep(unsigned int mseconds);

int main(){

Vehicle v,vc;
queue<Vehicle> colas[4];

while(true)
{

v = GeneraVehiculo();
printf ("Ingresa vehiculo (tipo %d) de matricula %d\n",v.tipo,v.matricula);

if (colas[v.tipo].empty())
atender(v);
else
{
// atiendo a quien espera en cola
vc = colas[(int)v.tipo].front();
colas[(int)v.tipo].pop();
atender(vc);  
colas[(int)v.tipo].push(v); // encolo al recien llegado
}
}
return 0;

}


void sleep(unsigned int mseconds)
{
   clock_t goal = mseconds + clock();
   while (goal > clock());
}  



Te dejo la tarea de implementar GeneraVehiculo() y atender()
HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *

JesusIII

Gracias por la ayuda, enserio. Pero he olvidado mencionar que el profesor a prohibido usar librerías de colas.

HardForo

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.......
HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *