简体   繁体   English

餐厅模拟

[英]Restaurant simulation

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define Empty 1
#define Full 0

float ChanceOfArrival (float CustomersPerMinute)
{
float CustomersArrivalChance;
int i;

/*Customers arriving per second */

CustomersArrivalChance = (CustomersPerMinute / 60) * 100;

printf ("The chance of customers arriving is: %0.3f%%\n", CustomersArrivalChance);

/* each 10 minute interval */

for (i = 0; i <= 18; i++)
{
    intervals (CustomersArrivalChance);
}

return CustomersArrivalChance;
}

int intervals (CustomersArrivalChance)
{

int totalCustomers = 0, totalWait = 0, queue = 0, SecondsInterval, waitingCustomers = 0;
int Cash1Salad, Cash1Buger, Cash2Salad, Cash2Burger;
int Cash1 = 1, Cash2 = 1;
int cointoss;
int x, Empty1, Empty2;
int CustomersServed = 0;
float RatePerMinute = 0, AverageWait = 0;
static int intervalNumber;
srand(time(NULL));

/*What could possibly happen every second in a 10 minute interval */
for (SecondsInterval = 0; SecondsInterval <= 600; SecondsInterval++)
{
    x = rand() % 101;

    if (CustomersArrivalChance >= x)
    {
        /*Customers Arrive this second */

        totalCustomers++;
        queue++;
        /*Choosing a cash at random */

        cointoss = rand()%2;
     if (queue > 0)
     {



        /* Cash 1 is open cash 2 is busy so the customer goes to cash 1 and chooses
        at random what they want to eat */
        if ((Cash1 == Empty) && (Cash2 != Empty) || (cointoss == 1) )
        {
            Cash1 = Full;
            queue--;

            switch ((rand()%2))
            {
                case 0:
                    Cash1Salad = rand()% 66 + 55;
                    totalWait = totalWait + Cash1Salad;
                    Empty1 = Cash1Salad;
                    CustomersServed++;
                    break;
                case 1:
                    Cash1Buger = rand()% 130 + 111;
                    totalWait = totalWait + Cash1Buger;
                    Empty1 = Cash2Burger;
                    CustomersServed++;
                    break;
            }
        }

        /* Cash 1 is busy cash 2 is open customer goes to cash 2 and chooses what they want */
        else if (Cash2 = Empty)
        {
            Cash2 = Full;
            queue--;

            switch ((rand()%2))
            {
                case 0:
                    Cash2Salad = rand()% 75 + 65;
                    totalWait = totalWait + Cash2Salad;
                    Empty2 = Cash2Salad;
                    CustomersServed++;
                    break;
                case 1:
                    Cash2Burger = rand()% 140 + 121;
                    totalWait = totalWait + Cash2Burger;
                    Empty2 = Cash2Burger;
                    CustomersServed++;
                    break;
            }
        }

        /*Both cashes are busy so the customer has to wait until one cash opens */
        else
        {
            totalWait++;
            waitingCustomers++;

        }

        /*Clearing Cash 1 if someone went there */
        if (Empty1 > 0)
        {
            Empty1--;
        }
        /*empty1 is equal to 0 then cash 1 is empty */
        else
        {
            Cash1 = Empty;
        }
        /*Clearing cash 2 is someone went there */
        if (Empty2 > 0)
        {
            Empty2--;
        }
        /*empty2 is equal to 0 then cash 2 is empty */
        else
        {
            Cash2 = Empty;
        }
     }
    }
    else
    {
        /*nothing happens because no customer showed up */
    }

}

intervalNumber++;

AverageWait = ((totalWait*1.0)/ (totalCustomers));
printf ("The average waiting time per customer in seconds is %0.2f in the interval      %d\n\n", AverageWait, intervalNumber);

printf  ("The total customers that arrived in the interval %d is %d\n\n", intervalNumber, totalCustomers);

}


int main (void)
{
    float CustomersPerMinute;

    printf ("Enter in the number of customers you want to arrive per minute:\n");
    scanf ("%f", &CustomersPerMinute);

    ChanceOfArrival(CustomersPerMinute);


    return 0;
}

Hi, I have this program that is suppose to simulate a restaurant that only serves a salad or burger, there are only two cashiers and only one line up that the customers can line up in to get served. 嗨,我有这个程序,假设模拟一个只供应沙拉或汉堡的餐厅,只有两个收银员,只有一个排队,客户可以排队等候送达。

I am not sure why it is not working but as everything makes logical sense I believe, but when i run this program is just prints out the average waiting time as it is suppose to. 我不确定为什么它不起作用但是因为我认为一切都具有逻辑意义,但是当我运行这个程序时,它只打印出平均等待时间。

But the problem is that the average wait time that is printed is the same in every interval. 但问题是每个间隔打印的平均等待时间是相同的。 Which is not what is I want. 这不是我想要的。

Logically I think the average wait time should be different in each interval because customers are being generated at random. 从逻辑上讲,我认为每个时间间隔的平均等待时间应该不同,因为客户是随机生成的。 However this is not the case as the average wait time is always the same, how can i fix this? 然而事实并非如此,因为平均等待时间总是相同的,我该如何解决这个问题呢?

As well the total number of customers is the same for each interval when is should be different because the customers are generated at random, how can i fix this problem as well? 由于客户是随机生成的,因此每个时间间隔的客户总数是相同的,因为客户是随机生成的,我该如何解决这个问题呢?

It looks like you are looping srand. 看起来你正在循环srand。 So it may give you the same rand() results at a given second. 所以它可能会在给定的秒内给你相同的rand()结果。 Stack overflow is not a debuging forum though ;) . 堆栈溢出不是一个debuging论坛虽然;)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM