#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
const int N=20;
int n; //作业数量
string workname[N]; //作业号
int arrivaltime[N]; //到达时间
int runtime[N]; //运行时间
int starttime[N]; //开始时间
int endtime[N]; //完成时间
int circletime[N]; //周转时间
float sumcircletime; //总的周转时间
float value_circletime[N]; //带权周转时间
float sumvalue_circletime; //总的带权周转时间
void Input()
{
cout<<"请输入作业的数量:\n";
cin>>n;
for(int i=1;i<=n;i++)
{
cout<<"请输入第"<<i<<"个作业名:"<<endl;
cin>>workname[i];
cout<<"请输入"<<workname[i]<<"作业的到达时间和运行时间:"<<endl;
cin>>arrivaltime[i]>>runtime[i];
}
}
void SortAT() //按到达时间进行排序
{
string temp1;
int temp2,temp3;
for(int i=1;i<=n;i++)
for(int j=i;j<=n;j++)
if(arrivaltime[i]>arrivaltime[j]) //交换作业名,到达时间,运行时间
{
temp1=workname[i];
workname[i]=workname[j];
workname[j]=temp1;
temp2=arrivaltime[i];
arrivaltime[i]=arrivaltime[j];
arrivaltime[j]=temp2;
temp3=runtime[i];
runtime[i]=runtime[j];
runtime[j]=temp3;
}
}
void fcfs()
{
//计算开始时间
for(int i=1;i<=n;i++)
{
if(i==1)
starttime[i]=arrivaltime[i];
else
starttime[i]=runtime[i-1]+starttime[i-1];
}
//计算完成时间
for(int i=1;i<=n;i++)
{
endtime[i]=starttime[i]+runtime[i];
}
//计算周转时间
for(int i=1;i<=n;i++)
{
circletime[i]=endtime[i]-arrivaltime[i];
sumcircletime+=circletime[i];
}
//计算带权周转时间
for(int i=1;i<=n;i++)
{
value_circletime[i]=(float)circletime[i]/runtime[i];
sumvalue_circletime+=value_circletime[i];
}
}
void Output()
{
cout<<"作业号 "<<" 到达时间"<<" 运行时间"<<" 开始时间"<<" 完成时间"<<" 周转时间"<<" 带权周转时间" <<endl;
for(int i=1;i<=n;i++)
{
printf(" %s %d %d %d %d %d %.2f\n",workname[i].c_str(),arrivaltime[i]
,runtime[i],starttime[i],endtime[i],circletime[i],value_circletime[i]);
}
cout<<endl;
printf("平均周转时间为:%.2f\n",sumcircletime/n);
printf("带权平均周转时间为:%.2f",sumvalue_circletime/n);
}
int main()
{
Input();
SortAT();
fcfs();
Output();
return 0;
}
FCFS先来先服务调度算法实现及测试
最新推荐文章于 2022-10-20 14:53:49 发布