如何使用C ++查找SJF(非抢先)算法的平均等待时间?

时间:2020-02-05 18:12:56

标签: c++

这是C ++中有关CPU调度算法的程序-SJF(非抢先式),我试图找出平均等待时间,但是我总是遇到错误。我的平均等待时间显示为无穷大。

    #include <iostream>
    #include <algorithm>
    using namespace std;

    int ab;

    typedef struct schedule
    {
        int pro_id;
        int at,bt,ct,ta,wt;
        float totalwt,awt;

    }schedule;

    bool compare(schedule a,schedule b)
    {
        return a.at < b.at;
    }

    bool compare2(schedule a,schedule b)
    {
        return a.bt < b.bt && a.at <= ab;
    }

    int main()
    {
        schedule pro[10];

        int n,i,j;


        cout<<"----SHORTEST JOB FIRST----\n";
        cout<<"Enter the number of processes:";
        cin>>n;
        cout<<"Enter the Process ID: ";
        for(i=0;i<n;i++)
        {
            cin>>pro[i].pro_id;
        }

        cout<<"Enter the Arrival Time (AT): ";
        for(i=0;i<n;i++)
        {
            cin>>pro[i].at;
        }

        cout<<"Enter the Burst Time (BT): ";
        for(i=0;i<n;i++)
        {
            cin>>pro[i].bt;
        }

        /*sort is a predefined funcion  defined in algorithm.h header file,
        it will sort the processes according to their arrival time*/

        sort(pro,pro+n,compare);

        // initial values

        pro[0].ct=pro[0].bt+pro[0].at;
        pro[0].ta=pro[0].ct-pro[0].at;
        pro[0].wt=pro[0].ta-pro[0].bt;

        for(i=1;i<n;i++)
        {
            ab=pro[i-1].ct;
            sort(pro+i,pro+n,compare2);
            if(pro[i-1].ct<pro[i].at)
            {
                pro[i].ct=pro[i-1].ct+pro[i].bt+(pro[i].at-pro[i-1].ct);
            }
            else
            {

                pro[i].ct=pro[i-1].ct+pro[i].bt;

            }
            pro[i].ta=pro[i].ct-pro[i].at;
            pro[i].wt=pro[i].ta-pro[i].bt;
        }

这是问题开始的地方,这是平均等待时间代码开始的地方,为什么总是如此 向我显示无限的答案?

        for(i=0;i<n;i++)
        {
            pro[i].totalwt+=pro[i].wt;
        }


        cout<<"\nP.ID\tAT\tBT\tCT\tTAT\tWT\t\n\n";
        for(i=0;i<n;i++)
        {
            //before executing make it in one statement
            cout<<pro[i].pro_id<<"\t"<<pro[i].at<<"\t"<<pro[i].bt
            <<"\t"<<pro[i].ct<<"\t"<<pro[i].ta<<"\t"<<pro[i].wt;

            cout<<endl;
        }
        pro[i].awt=pro[i].totalwt/n;
        cout<<"\n\nAverage Waiting Time:"<<pro[i].awt;
        return 0;
    }

0 个答案:

没有答案