Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - LordWasowski

#1
Programación C/C++ / Ayuda Colas en C
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

#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