elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda Colas en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda Colas en C  (Leído 2,172 veces)
LordWasowski

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Ayuda Colas en C
« en: 20 Junio 2016, 03:18 am »

Buenas, si me pueden ayudar con un programa en c que simule la cola en un supermercado, en donde hay 5 carritos, cada vez que un cliente ingrese toma un carrito y se coloca en la caja con la cola más corta. Si se acaban los carritos se debe hacer una cola fuera del supermercado hasta que algún carrito se libere.

Ya realicé una buena parte del programa, el problema es que cuando ingreso a un cliente ingresan 2 al mismo tiempo y no sé por que.

Aquí el código

Código:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>


typedef struct nodo
{
  int icliente;//se guarda el nombre del cliente
  nodo *next;//puntero siguiente
 
}nodo;
typedef struct nodo1
{
  int icliente1;//se guarda el nombre del cliente
  nodo1 *next1;//puntero siguiente
 
}nodo1;

typedef struct nodo2
{
  int icliente2;//se guarda el nombre del cliente
  nodo2 *next2;//puntero siguiente
 
}nodo2;

nodo *cola,*fin=NULL,*inicio=NULL;
nodo1 *cola1,*fin1=NULL,*inicio1=NULL;
nodo2 *cola2,*fin2=NULL,*inicio2=NULL;
main ()
{
  int x[5], i, op, n=0,n1=0,n2=0,ct=0,nc,cnc;
      for (i=0;i<5;i++)
      {
       x[i]=0;
      }
do{ system("color a"); 
    system("CLS");
    printf("=========MENU=========\n");
   
   
    printf("\n 1.- Ingresar Cliente");
    printf("\n 2.- Mostrar Colas");
    printf("\n 3.- Despachar Cliente");
printf("\n 4.- Salir");   
   
   
    printf("\n\n Ingrese una opcion: ");
    scanf("%d",&op);
    printf("\n");
      switch(op)
      {
      case 1:
      system ("cls");
     
      if(n<=n1 && ct<5 && n2==0)
       {
        cola=(nodo*)malloc(sizeof(nodo));
        cola->icliente =1;
        n++;
        cola->next=NULL;
        for (i=0;i<5;i++)
        if(x[i]==0)
         {
          x[i]=1;
          ct++;
          break;
         }
      printf("Un cliente ha entrado en el supermercado\n");
      getch();
      if(fin==NULL)
       inicio=fin=cola;
      else
       {
        fin->next=cola;
        fin=cola;
       }
       }
      if (n>n1 && ct<5 && n2==0)
       {
        cola1=(nodo1*)malloc(sizeof(nodo1));
        cola1->icliente1 =1;
        n1++;
        cola1->next1=NULL;
        for (i=0;i<5;i++)
         if(x[i]==0)
          {
           x[i]=1;
           ct++;
           break;
          }
        printf("Un cliente ha entrado en el supermercado\n");
        getch();
        if(fin1==NULL)
         inicio1=fin1=cola1;
        else
         {
          fin1->next1=cola1;
          fin1=cola1;
         }
       }
      if(n<=n1 && ct<5 && n2>0)
       {
        n2--;
      cola2=inicio2;
      cnc=cola2->icliente2;
      printf("Un cliente de la cola de espera ha ingresado al supermercado");
      getch();
    fin2=NULL;
      inicio2=cola2->next2;
      if(inicio2==NULL)
    {
     cola2=NULL;
    }
   
        cola=(nodo*)malloc(sizeof(nodo));
        cola->icliente =cnc;
        n++;
        cola->next=NULL;
        for (i=0;i<5;i++)
        if(x[i]==0)
         {
          x[i]=1;
          ct++;
          break;
         }
        if(fin==NULL)
         inicio=fin=cola;
        else
         {
          fin->next=cola;
          fin=cola;
         }
       }
      if(n>n1 && ct<5 && n2>0)
       {
        n2--;
      cola2=inicio2;
      cnc=cola2->icliente2;
      printf("Un cliente de la cola de espera ha ingresado al supermercado");
      getch();
      for (i=0;i<5;i++)
        if(x[i]==0)
        {
         x[i]=1;
         ct++;
         break;
        }
    inicio2=cola2->next2;
    if(inicio2==NULL)
   {
    cola2=NULL;
    fin2=NULL;
   }
   
      cola1=(nodo1*)malloc(sizeof(nodo1));
      cola->icliente =cnc;
      n++;
      cola->next=NULL;
      if(fin1==NULL)
       inicio1=fin1=cola1;
      else
       {
        fin1->next1=cola1;
        fin1=cola1;
       }
       }
      if(ct==5)
       {
        printf("No hay Carritos disponibles, el cliente debe esperar afuera hasta que se desocupe un carrito");
        getch ();
    cola2=(nodo2*)malloc(sizeof(nodo2));
        cola2->icliente2 =1;
        n2++;
        cola2->next2=NULL;
 
        if(fin2==NULL)
        inicio2=fin2=cola2;
        else
         {
          fin2->next2=cola2;
          fin2=cola2;
         }
       }
      break;
     
  case 2:
  system ("cls");
  printf("Que cola desea ver?\n1. Caja 1\n2. Caja 2\n3. Cola de espera\n4. Carritos disponibles\n");
  scanf("%d",&nc);
  switch(nc)
  {
  case 1:
  if(fin==NULL)
         {
          printf("La cola esta Vacia");
          getch();
}
         else
         {
         printf("Hay %d clientes en la caja %d\n",n,nc);
         getch(); 
}
break;
case 2:
  if(fin1==NULL)
         {
          printf("La cola esta Vacia");
          getch();
}
         else
         {
         printf("Hay %d clientes en la caja %d\n",n1,nc);
         getch(); 
}
break;
case 3:
  if(fin2==NULL)
         {
          printf("La cola esta Vacia");
          getch();
}
         else
         {
         printf("Hay %d clientes en la cola de espera\n",n2);
         getch(); 
}
break;
case 4:
if (ct==5)
{
printf ("No hay carritos disponibles");
getch ();
}
else
{
printf("Hay %d carritos disponibles",5-ct);
getch ();
}
break;
          }
         break;
      case 3:
      system ("cls");
  printf("De que caja fue despachado el cliente?\n1. Caja 1\n2. Caja 2\n");
  scanf("%d",&nc);
  switch(nc)
  {
      case 1:
      if (inicio==NULL)
        {
         printf("No hay clientes para despachar en la caja %d",nc);
         getch();
}
       else
        {
         if(ct>0)
         {
         n--;
       cola=inicio;
       printf("Un cliente de la caja %d ha sido despachado\n",nc);
       for (i=0;i<=5;i++)
          if(x[i]==1)
         {
          x[i]=0;
          ct--;
          break;
         }
       getch();
       inicio=cola->next;
       if(inicio==NULL)
     {
  cola=NULL;
  fin=NULL;
}
}

        }
        break;
        case 2:
      if (inicio1==NULL)
        {
         printf("No hay clientes para despachar en la caja %d",nc);
         getch();
}
       else
        {
         if(ct>0)
         {
          n1--;
        cola1=inicio1;
        printf("Un cliente de la caja %d ha sido despachado\n",nc);
        for (i=0;i<=5;i++)
          if(x[i]==1)
         {
          x[i]=0;
          ct--;
          break;
         }
       getch();
       inicio1=cola1->next1;
       if(inicio1==NULL)
     {
  cola1=NULL;
  fin1=NULL;
}
}
        }
   }
   break;
   break;
  }}while (op!=4);
}

Agradezco cualquier sugerencia


En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.696


🏴 Libertad!!!!!


Ver Perfil WWW
Re: Ayuda Colas en C
« Respuesta #1 en: 20 Junio 2016, 05:22 am »

Hola que tal con gusto te ayudamos.

Veo las variables pero realmente no se que deben dw contener.

Veo tambien varios tipos de nodos y no veo la diferencia entre ellos.

Examine rápidamente la sección de ingresar un cliente y no comprendo la logica de las variables deberias de agregar comentarios al codigo.

Saludos


En línea

LordWasowski

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Ayuda Colas en C
« Respuesta #2 en: 20 Junio 2016, 05:46 am »

X[5] es la cantidad de carritos de supermercado
i hace de contador que se usa para recorrer el arreglo de los carritos
op es para el case
n, n1 y n2 son contadores para cada cola, indican si hay clientes o no en la cola
ct es el contador de carritos
nc es para los cases anidados
cnc es para copiar el elemento que se encuentra de primero en la cola de espera

hice tres nodos porque pensé que era necesario un nodo para cada cola, en cada uno se ingresa un número entero, en este caso yo le coloqué uno
En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.696


🏴 Libertad!!!!!


Ver Perfil WWW
Re: Ayuda Colas en C
« Respuesta #3 en: 20 Junio 2016, 06:27 am »

No es necesario tener distintos tipos de nodos solo necesitas uno:

Código
  1. typedef struct nodo
  2. {
  3.  int icliente;//se guarda el nombre del cliente
  4.  nodo *next;//puntero siguiente
  5.  
  6. }nodo;

Ahora veo que tienes todo dentro del main principal. Para un programa como el que mencionas necesitas funciones auxiliares creeme que te facilitaran la vida.

Por ejemplo puedes tener una funcion que agrege un nodo o valor a la Cola dada y si no esta inicializada que la inicialize..
por ejemplo

Código
  1. nodo* agregar(nodo *cola, int valor){
  2. nodo *nuevo,*temporal;
  3. nuevo =  calloc(sizeof(nodo),1);
  4. nuevo->icliente = valor;
  5. if(cola != NULL){
  6.  temporal = cola;
  7.  while(temporal->next != NULL){
  8.     temporal = temporal->next;
  9.  }
  10.  temporal->next = nuevo;
  11.  return cola;
  12. }
  13. else{
  14. return nuevo;
  15. }
  16. }


Y en.el main solo la llamarias:

Código
  1. nodo *cola1 = NULL;
  2. cola1 = agregar(cola1,1);

Otra cosa no es recomendable usar conio.h
Por que no es estandar.
Ni las funciones system ya que solo funcionaran en unsistema que tenga los comandos llamados.

Saludos
« Última modificación: 20 Junio 2016, 17:06 pm por AlbertoBSD » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con Pilas y Colas
Programación Visual Basic
[Decoded] 5 8,205 Último mensaje 30 Agosto 2010, 15:06 pm
por goldarg
Ayuda con colas en C++
Programación C/C++
edgar_areyes 0 5,115 Último mensaje 28 Noviembre 2010, 05:42 am
por edgar_areyes
ayuda en colas
Programación C/C++
josue_tux 0 2,019 Último mensaje 25 Mayo 2011, 00:08 am
por josue_tux
ayuda con colas en c/c++
Programación C/C++
alci06 4 3,442 Último mensaje 29 Mayo 2011, 23:55 pm
por alci06
Ayuda con colas en c++
Programación C/C++
oscar.trevino 1 1,475 Último mensaje 5 Marzo 2017, 12:58 pm
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines