Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Colas en c++

Estas en el tema de Colas en c++ en el foro de C/C++ en Foros del Web. Necesito hacer un generador de tickets en c++, ya tengo la interfaz grafica, pero aun no tengo idea de como implementar colas para asi manejar ...
  #1 (permalink)  
Antiguo 17/07/2011, 21:05
 
Fecha de Ingreso: julio-2011
Mensajes: 7
Antigüedad: 12 años, 9 meses
Puntos: 0
Colas en c++

Necesito hacer un generador de tickets en c++, ya tengo la interfaz grafica, pero aun no tengo idea de como implementar colas para asi manejar los tickets y posicionarlos.

Alguna ayuda.
Gracias de antemano.
  #2 (permalink)  
Antiguo 18/07/2011, 10:45
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Colas en c++

Una cola puede ser representado con una lista o vector. Cuando necesitas un elementos sacas el primero...cuando agragas un elemento lo pones al final...

Esa es la idea general... necesitariamos saber mas sobre tu programa para dar mejores explicaciones,
  #3 (permalink)  
Antiguo 19/07/2011, 03:20
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 21 años, 2 meses
Puntos: 22
Respuesta: Colas en c++

Puedes utilizar queue.
  #4 (permalink)  
Antiguo 19/07/2011, 18:29
 
Fecha de Ingreso: julio-2011
Mensajes: 7
Antigüedad: 12 años, 9 meses
Puntos: 0
Información Respuesta: Colas en c++

Gracias sam90, pero en realida lo que tengo es una gran duda de como manejarlas, de como manejar los nodos, introducirlos, eliminarlos, agregarlos e implementar dicha cola en mi programa.

En si, el programa trata de un generador de tickets, parecido al de los bancos, donde el cliente toma su ticket y en la pantalla apareceraa el numero que esta siendo atendido.

Gracias de antemano.
  #5 (permalink)  
Antiguo 19/07/2011, 20:23
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Colas en c++

Mira si tienes interfaz grafica, muy dificil no deberia ser crear una cola.
Podrias definir al nodo de esta forma:

Código C:
Ver original
  1. typedef struct  {
  2.      int numero;
  3.     struct nnodo * next;
  4. }  Nodo;

Código C:
Ver original
  1. typedef struct  {
  2.     struct nnodo * primero, ultimo;
  3. }   Cola;

Teniendo esas estructuras primero inicializas la cola poniendo a primero y ultimo como NULL.
Para insertar en la cola lo que haces es.

ultimo->next = nuevonodo;
ultimo = nuevonodo;

Para borrar seria
aux = primero;
primero = primero->Next;
return aux;

Obviamente tenes que considerar los casos donde la cola esta vacia y esa cosas. Pensalo bien, desarrolla algo y si tenes alguna duda, comenta
  #6 (permalink)  
Antiguo 27/07/2011, 16:51
 
Fecha de Ingreso: julio-2011
Mensajes: 7
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Colas en c++

Gracias a todos por sus apreciados comentarios. Aqui les dejo lo que he adelantado y la idea de lo que quiero seguir haciendo.

tengo mis clases: Turno.h, Turno.cpp, Cola.h, Cola.cpp y Sistema.cpp
Lo que quiero ahora es que mis turnos vallan pasando uno por uno luego de que
el cliente tome uno.AAlguna idea.

El turno, vendria siendo cada nodo de mi cola.

clase: Turno.h

#include <iostream>
#include <string>

using namespace std;

class Turno{
private:
string nombre;
Turno* anterior;

public:
string getNombre();
void setNombre(string nombre);
Turno* getAnterior();
void setAnterior(Turno* anterior);
Turno();

};


Clase: Turno.cpp

#include "Turno.h"

string Turno:: getNombre(){

return nombre;
}

void Turno::setNombre(string nombre){
this -> nombre = nombre;
}

Turno* Turno::getAnterior(){

return anterior;
}

void Turno::setAnterior(Turno* anterior){
this -> anterior = anterior;
}

Turno::Turno(){
anterior = NULL;
}


Clase: Cola.h


#include "Turno.cpp"

class Cola{
private:
int tamano;
Turno* primero;
Turno* ultimo;

public:
Cola();
~Cola();
int getTamano();
void setTamano(int tamano);
Turno* getPrimero();
Turno* getUltimo();
Turno* extraer();
void agregar(Turno* turno);


};

Clase: Cola.cpp

#include "Cola.h"

Cola::Cola(){
primero = NULL;
ultimo = NULL;

}

Cola::~Cola(){
Turno* tempA;
Turno* tempB;

if(primero != NULL){
tempA = primero;
while(tempA != NULL){
tempB = tempA;
tempA = (*tempA).getAnterior();
delete tempB;
}

}
Cola();
}


int Cola::getTamano(){
return tamano;
}

Turno* Cola::getPrimero(){
return primero;

}

Turno* Cola::getUltimo(){
return ultimo;

}

void Cola::setTamano(int tamano){
this -> tamano = tamano;

}

void Cola::agregar(Turno* turno){
if(primero == NULL){
primero = turno;
ultimo = turno;
}
else{
Turno* temp = ultimo;
ultimo = turno;
temp->setAnterior(ultimo);

}
}

Turno* Cola:: extraer(){
if(primero == NULL){
return NULL;

}
Turno* temp = primero;
primero = primero -> getAnterior();
return temp;
}


Clase: Sistema.cpp (main)

#include "Cola.cpp"

using namespace std;

int main(){

Cola* cola = new Cola();

Turno* turno1 = new Turno();
Turno* turno2 = new Turno();

turno1 -> setNombre("JuanlUis");
turno2 -> setNombre("Otro");

cola ->agregar(turno1);
cola ->agregar(turno2);


Turno* i = cola -> extraer();

while(i != NULL){
cout<<i -> getNombre()<<endl;
delete i;
i = cola -> extraer();
}


system("PAUSE");
return 0;
}


Disculpen lo largo del comentario.
  #7 (permalink)  
Antiguo 27/07/2011, 19:24
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Colas en c++

El codigo esta bien. Lo estuve leyendo y parece correcto. Lo que no logro entender eso de que vayan pasando los turnos?? Tu quieres representar eso de que la gente saca un numero y tiene que esperar a que le toque??
  #8 (permalink)  
Antiguo 28/07/2011, 09:41
 
Fecha de Ingreso: julio-2011
Mensajes: 7
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Colas en c++

Mis disculpas por no haberme explicado bien y gracias por tus comentarios.

Es exactamente eso que quiero, lo que mencionaste.Una persona toma un turno, pero luego espera a que su turno llegue.

pero el turno siguiente sera indicado por otra parte de la aplicacion.


Gracias de antemano.
  #9 (permalink)  
Antiguo 28/07/2011, 10:26
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Colas en c++

Lo que podrias hacer es que al sacar un tuno se agrega a la cola. Despues habria un proceso que saca un item de la cola (el primero), ahi deberias comparar el turno sacado con todos los "clientes esperando". El que tenga ese mismo turno es al que antendes.

Deberias crear una comparacion de turnos. Una forma seria comparar el array. Otra fijarte si tenes el mismo puntero.

Igualmente estaria bueno saber mas sobre lo que quieres hacer...Para que lo estas aplicando.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:44.