这是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;
}