Dev - C++ - Listas y colas c++ se para el programa sin error

 
Vista:

Listas y colas c++ se para el programa sin error

Publicado por Jesús (2 intervenciones) el 30/10/2019 18:34:16
Hola a todos!

Tengo el siguiente programa que simula la llegada de pasajeros a un aeropuerto y los debe asignar en la cola de un box.
Tenemos Listas con los boxes, colas en cada box.

El problema lo tengo cuando intento introducir un pasajero en una cola de un box determinado. Siempre hay un box inicial, y tengo que comprobar si ese box tiene más de 2 pasajeros para abrir uno nuevo.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
Método del main:
 
void Aeropuerto::simularAtencion2()
{
    int idAux = 1;
    int tiempo = 0;
    Box box(idAux);
    listaBox.insertarBox(box);
 
    //Creamos los pasajeros y los introducimos en una lista ordenada por hora de llegada
    Pasajero pasajero1(1,6,"Indonesia",0,20);
    Pasajero pasajero2(2,7,"Australia",5,39);
    Pasajero pasajero3(3,1,"Portugal",0,15);
    /*Pasajero pasajero4(4,5,"Sudafrica",7,27);
    Pasajero pasajero5(5,3,"Alemania",21,20);
    Pasajero pasajero6(6,2,"Italia",18,14);
    Pasajero pasajero7(7,6,"Indonesia",9,16);
    Pasajero pasajero8(8,7,"Australia",14,31);
    Pasajero pasajero9(9,4,"Noruega",11,23);*/
 
    //Introducimos los pasajeros por orden de llegada
    llegada(pasajero1);
    llegada(pasajero2);
    llegada(pasajero3);
    /*llegada(pasajero4);
    llegada(pasajero5);
    llegada(pasajero6);
    llegada(pasajero7);
    llegada(pasajero8);
    llegada(pasajero9);*/
 
    //Copiamos los datos a la pila.
    copiarAPila();
 
    //Comprobamos que tenemos datos en la pila o en la cola e iteramos para introducir los pasajeros en los box.
    while((pilaPasajeros.getLongitud() > 0)||(colaPasajeros.colaVacia() != false))
    {
            Pasajero pasajero;
            /*cout << "Estado inicial de pila/cola en tiempo -> " << tiempo << "\n";
            colaPasajeros.mostrar();
            pilaPasajeros.mostrar();*/
            //Comprobamos que la pila tenga pasajeros para extraer los datos.
            if(pilaPasajeros.getLongitud() > 0)
                {
                    pasajero = pilaPasajeros.extraerPasajero();
                }
            //Iteramos comprobando que la llegada del pasajero es igual al tiempo (contador) y que la pila tiene datos. Con este bucle introducimos todos los pasajeros que llegan en tiempo = t y los 
            //introducimos por prioridad en la cola. Comprobamos de nuevo que la pila tiene datos antes de extraer un nuevo pasajero.
            while((pasajero.getLlegada() == tiempo)&&(pilaPasajeros.getLongitud() > 0))
            {
                if(listaBox.boxNecesario() == true)
                {
                    idAux = idAux + 1;
                    Box box(idAux);
                    listaBox.insertarBox(box);
                }
                listaBox.insertarPasajeroBox(pasajero); <<<<<<<<<<<<<<<<<< el problema salta aqui
                pilaPasajeros.eliminar();
                if(pilaPasajeros.getLongitud() > 0)
                {
                    pasajero = pilaPasajeros.extraerPasajero();
                }
                cout << "Lista de boxes --> \n";
                listaBox.mostrarLista();
            }
 
        tiempo = tiempo + 1;
        }
 
        system("pause");
}
//////////////////////////////////
metodo insertarPasajeroBox
//Compruebo en que cola hay menos pasajeros para insertarlo.
 
void Lista::insertarPasajeroBox(Pasajero p)
{
    int contador = 1;
    lnodo aux = primero;
    Cola b = aux->box.getCola();
 
    while(contador < longitud)
    {
        if(b.getLongitud() > aux->siguiente->box.getCola().getLongitud())
        {
            aux = aux->siguiente;
            b = aux->box.getCola();
        }
        contador++;
    }
    b.insertarConPrioridad(p); <<<<<<<<<<<<<<<<<<<<<<<<<
}



Aqui entra a los dos metodos de la clase cola:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//Inserta un pasajero en la cola.
void Cola::insertar(Pasajero p)
{
    pnodo nuevo;
    nuevo = new NodoCola(p);
    if(ultimo)
	ultimo->siguiente = nuevo;
    ultimo = nuevo;
    if(!primero)
	primero = nuevo;
 
<<<<<<<<<<<<<<<<<<<<<<< aqui se para
}
 
//Inserta un pasajero según su prioridad de mayor a menor, comparando la prioridad de los que están en la cola con el que se va a introducir.
void Cola::insertarConPrioridad(Pasajero p)
{
    pnodo nuevo;
    nuevo = new NodoCola(p);
    if(!primero) {
    cout << "1 -->";
	insertar(p);
    } else if(p.getPrioridad() <= ultimo->pasajero.getPrioridad()) {
    cout << "2 -->";
	insertar(p);
    } else if(p.getPrioridad() > primero->pasajero.getPrioridad()) {
    cout << "3 -->";
	nuevo->siguiente = primero;
	primero = nuevo;
    } else {
    cout << "4 -->";
	pnodo aux = primero;
	while(p.getPrioridad() < aux->siguiente->pasajero.getPrioridad()) {
	    aux = aux->siguiente;
	}
	nuevo->siguiente = aux->siguiente;
	aux->siguiente = nuevo;
    }
    tamanyo = tamanyo + 1;
}

Se para al terminar el insertar() y no sigue el bucle en el main. No me da error y llevo dándole vueltas unas horas... ¿Alguien ve que se me escapa?

Muchas gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder