• 排队论的C实现


    大家好,我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang
    以下鄙人实现了排队论思想,语言是C语言
     
    #include<stdio.h>
    #include<float.h>
     
    int main()
    {
     
    /************************************what we know in the system**************************************/
        float arrivals[] = {0.4, 1.6, 2.1, 3.8, 4.0, 5.6, 5.8, 7.2};//the time of each customer's arrival
        float departures[] = {2.4, 3.1, 3.3, 4.9, 8.6};//the time of each customer's departure
        int acount = 0;//the index of arrivals array
        int dcount = 0;//the index of departures array
    /***************the clock and clock event in the simulating system******************/
        float clock = 0;//simulation clock
        float clock_event[2] = {arrivals[acount],departures[dcount]};//clock[0] means arrival time,clock[1] means departure time
        int clock_event_times[2] = {0, 0}; //clock_event_times[0] means the count of arrival event happened;
                                            //clock_event_times[1] means the count of departure event happened
    /*****************system state ****************************/
        int serve_status = 0;//false means ideal and 1 means busy
        int no_in_queue = 0;//the number in queue
        float time_of_arrival[4] = {0};//the time of arrival
        float time_of_last_event = 0;// the time of last event
     
    /*****************statistical counters***************/
        int no_delayed = 0;//the number of delayed
        float total_delay = 0;//the total delay time
        float area_under_Q = 0;//the area under queue(t)
        float area_under_B = 0;//the area under busy(t)
        
    /********the stop time***/
        char temp;
        int end_event;
        printf("Please input the stop event of this simulating system(a means arrival and d means departure): ");
        scanf("%c", &temp);
        if (temp == 'd')
            end_event = 1;
        else
            end_event = 0;
        int ordinal;
        printf("Please input the customer's ordinal of the stop event you have input:");
        scanf("%d", &ordinal);
        
    /***********start********************/
        while(clock_event_times[end_event] < ordinal)
        {
     
            if(clock_event[0]<clock_event[1] )//arrival event
            {
                clock = clock_event[0];
                acount += 1;
                clock_event[0] = arrivals[acount];
                clock_event_times[0] += 1;
                if(serve_status == 0)//no body
                {
                    serve_status = 1;
                }
                else
                {
                    time_of_arrival[no_in_queue] = clock;
                    area_under_B += serve_status * (clock - time_of_last_event);
                    area_under_Q += no_in_queue * (clock - time_of_last_event);
                    no_in_queue += 1;
                }
     
            }
            else//department event
            {
                clock = clock_event[1];
                dcount += 1;
                clock_event[1] = departures[dcount];
                clock_event_times[1] += 1;
                area_under_B += clock - time_of_last_event;
                if(no_in_queue == 0)
                {
                    serve_status = 0;
                }
                else
                {
                    clock_event[1] = departures[dcount];
                    total_delay += clock - time_of_arrival[0];
                    area_under_Q += no_in_queue * (clock - time_of_last_event);
                    no_in_queue -= 1;
                    time_of_arrival[0] = time_of_arrival[1];
                    time_of_arrival[1] = time_of_arrival[2];
                    time_of_arrival[2] = time_of_arrival[3];
     
                }
     
            }
            time_of_last_event = clock;
        }
        printf("Number delayed: %d ", clock_event_times[1]);
        printf("Total delay: %2f ", total_delay);
        printf("Area under Q(t): %2f ", area_under_Q);
        printf("Area under B(t): %2f ", area_under_B);
     
        return 0;
    }
  • 相关阅读:
    主从数据库
    Linux 安装 mysql
    centos7.5上安装go1.13.4
    Linux 安装php
    CENTOS7下安装redis
    CentOS 7安装Etherpad(在线协作编辑)
    nginx《一安装》
    springboot中redis取缓存类型转换异常
    linux安装mysql
    linux上传下载文件(转载https://www.jb51.net/article/143112.htm)
  • 原文地址:https://www.cnblogs.com/xiaoyajiang/p/5950330.html
Copyright © 2020-2023  润新知