Problema con una Cola

Iniciado por vegasound, 8 Mayo 2014, 02:49 AM

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

vegasound

Alguien que me pueda echar una mano con un código de una Cola ya sea en c o c++.
Sí alguien quiere ayudarme le agradeceré infinitamente .

Crear cola:

La atención de servicios con tipos de prioridad
Asuma que existen tres tipos de prioridad: alta, media y baja. En un sistema de recepción de solicitudes, solo una soli- citud puede ser atendida a la vez. Una solicitud puede ser emitida con una prioridad alta, media o baja. El sistema de recepción:
1. 2. 3.
Solo atenderá servicios de prioridad alta, si estos existen en la lista de espera. Solo atenderá servicios de prioridad media, si no existen servicios de prioridad alta. Siempre atenderá servicios de prioridad baja, si no existen servicios de prioridad media o alta.
Este problema se puede modelar con la implementación de tres colas: una para las solicitudes de prioridad al- ta, otra para las solicitudes de prioridad media y otra más para las solicitudes de prioridad baja. Cuando una solicitud es generada, ocupará su lugar en la cola correspondiente. El sistema de recepción:
1.   Deberá intentar vaciar en primer lugar la cola de solicitudes de prioridad alta. 2.   Si la cola de solicitudes de prioridad alta se encuentra vacía, entonces intentará vaciar la cola de solicitudes de
prioridad media. 3.   Si las colas de solicitudes de prioridad alta y media se encuentran vacías entonces intentará vaciar la cola de
solicitudes de prioridad baja.
Implementación
Su aplicación deberá permitir al usuario ingresar una solicitud de servicio o una recepción.
   Una solicitud de servicio deberá consistir de un identificador de servicio (algún valor entero seleccionado arbi- trariamente) junto con un indicador de prioridad. Los indicadores de prioridad serán: A para alta, M para me- dia y B para baja. Por ejemplo, 3541:A denota al servicio 3541 de prioridad alta.
   Una recepción de servicio deberá atender la primera solicitud de la más alta prioridad que se haya emitido hasta el momento y que no haya sido atendida, según se explica en el planteamiento en el programa. Su apli- cación deberá informar cuál es el servicio que se atiende actualmente, mostrando en pantalla el identificador de servicio. En su caso, deberá informar si ningún servicio se encuentra en la lista de espera.




Ejemplo:

Suponga que ocurren la siguientes solicitudes en el orden que se presentan antes de antes de hacer alguna recepción de servicio:
1325:B
4800:M
732:B
8943:A
120:M
884:B

Si ninguna otra solicitud ocurre después, entonces su sistema deberá hacer la recepción de los servicios en el siguiente orden:
8943
4800
120
1325
732
884

engel lex

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

vegasound

Es correcto, en ningún momento escribí, "Hagan el código que solicito".

No veo razón por la que el post deba de ser banneado o borrado, Estoy pidiendo una mano, ayuda, de cualquier manera. saludos

engel lex

es que haces igual que muchos que simplemente tirar su problema ahí esperando que alguien haga el código...

ya que muestras interés continúo...

se responden dudas en el foro, los que sepan, no siempre será rápido, no siempre responderán...

recomendación:
publica siempre estas 3 cosas...
-que quieres? (el problema que ya publicaste)
-que tienes? (muestra tu codigo aunque sea poco, usa las etiquetas de codigo o GeSHi para publicarlo)
-cual es el problema? (que evita que avances, que no sabes o que error te da)

:P continua con eso
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

vegasound

Es la primera vez que ingreso a este foro con el proposito de ayudarnos mutuamente. aquí subo el código que actualmente tengo, me marca errores sólo en el MAIN a partir de la linea 45 (while(1)), espero me puedan apoyar, subo tmbn los archivos de cabecera. el .h y el .cpp


MAIN CPP.

# include <cstdio>
# include "queue.h"
# include <cstdlib>
# include <ctype.h>
# include <iostream>
# include <ctime>

using namespace std;



int main() {
   
   queue alta;
   queue media;
   queue baja;
   char nivel;
   int solicitud;
   int opcion;
   srand (time(NULL));
   
   generar (alta);
   generar (media);
   generar (baja);



   while (1){
      system ("cls");
      printf("1.Solicitar servicio\n2.Recepcion de servicio\n3.Mostrar solicitudes\n4.Salir\n\nElija una opción : ");
      scanf ("%i", opcion);
      
      switch (opcion){
         case 1:
            do{
               printf ("Nivel de prioridad del servicio : ");
               scanf ("%c", nivel);
               nivel = toupper(nivel);
            }
            while
               (nivel != 'A' && nivel ! = 'M' && nivel != 'B');
            
            solicitud = srand (time(NULL)) % 1000 + 1;
            if (nivel == 'A')
               ingresar (alta,solicitud,nivel);
            else if (nivel == 'M')
               ingresar (media, solicitud, nivel);
            else
               ingresar (baja,solicitud,nivel);
            break;
            
         case 2:
            if (!vacia(alta))
               printf("\nSolicitud ", dequeue(alta));
            printf(":A listo\n");
            
            else if (!vacia(media))
               printf ("\nSolicitud ", dequeue(media));
            printf(":M listo\n");
            else if (!vacia(baja))
               printf("\nSolicitud ", dequeue(baja));
            printf(":B listo\n");
            else
               printf("No hay solicitud en espera");
            
            break;
            
            case 3 :
            printf("\n Solicitudes de alta prioridad \n");
            imprimir(alta);
            printf("\n Solicitudes de media prioridad \n");
            imprimir(media);
            printf("\n Solicitudes de baja prioridad \n");
            imprimir(baja);
            break;
            
         case 4:
            destruir(alta);
            destruir(media);
            destruir(baja);
            return 0;
            break;
            
         default :
            printf("\Escriba una opcion valida\n");
      }
      system ("pause");
   }
   return 0;
            
            


queue.h


# ifndef _queue_hedear_
# define _queue_header_

typedef struct snode {
   
    int data;
    snode *next;
   char nivel;
   
} node;

typedef struct {
   
    node *enter;
    node *exit;
    int capacity;
    int size;
   
} queue;

void generar(queue&);
void destruir(queue&);

int capacidad(queue&);
int tamanno(queue&);

void inicializar(queue&);
bool vacia(queue&);
bool llena(queue&);

bool enqueue(queue&, int,char);  //ingresar
int dequeue(queue&);  //extraer
int front(queue&);    //top

void imprimir(queue&);
void limpiar (queue&);


# endif // _queue_header_




queue .cpp



#include "queue.h"

# include <cstdio>

void generar(queue &q, int n) {
   
   q.exit = NULL;
   q.enter = NULL;
   q.capacity = n;
   q.size = 0;
}

void destruir(queue &q) {
   
   limpiar (q);
   q.exit = NULL;
   q.enter = NULL;
   q.capacity = 0;
   q.size = 0;
}

int capacidad(queue &q) { return q.capacity; }

int tamanno(queue &q) { return q.size; }

void inicializar(queue &q) {
   
   limpiar (q);
   q.enter = NULL;
   q.exit = NULL;
   q.size = 0;
}

bool vacia(queue &q) { return q.enter == NULL; }

bool llena(queue &q) { return q.capacity == q.size; }

bool enqueue(queue &q, int dato, char nivel) {  //ingresar
   
   
      node *aux = new node;
      aux -> data = dato;
       aux -> nivel = nivel;
      aux -> next = NULL;
      
      if (vacia(q)) {
         
         q.enter = aux;
         q.exit = aux;
         
      } else {
         
         q.exit -> next = aux;
         q.exit = aux;
         
      }
      
      q.size++;
   printf ("\n");
   imprimir(q);
      return true;
    }
   
int dequeue(queue &q) {
   
   
    if (!vacia(q)) {
      
      int datoborrado;
      node *aux = q.enter;
      q.enter = q.enter -> next;
      datoborrado = aux -> data;
        delete aux;
        q.size--;
      
      return datoborrado;
      
    }
   
    return 0;
}

void generar (queue&q){
   q.enter = NULL;
   q.exit = NULL;
}

void imprimir(queue &q) {
   
   
   node *aux = q.enter;
   while (aux){
      printf (" : ",aux ->data);
      printf ("\n", aux ->nivel);
            aux = aux -> next;
   
   }
   printf ("\n\n");
}

void limpiar (queue&q){
   node *aux = q.enter;
   while (aux){
      q.enter = q.enter -> next;
      delete aux;
      aux = q.enter;
   }
}











engel lex

modifica el post y el código colócalo entre etiquetas GeSHi como te indiqué (están arriba de los emoticones a la derecha)

por favor poste exactamente el error que da
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Gh057

hola vegasound, a simple vista observo lo siguiente... por favor fíjate si no fue al pegar el código o bien tienes un error de tipeo en la primera línea de tu cabecera .h:

Citar# ifndef _queue_hedear_

saludos
4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...