全部是自己写出纯手写累死我了
#include<iostream>
using namespace std;
const int N=10;
double daoda[N];//存储到达时间的数组
double yunxing[N]; //存储运行时间的数组
double kaishi[N];//存储开始时间的数组
double wancheng[N];//存储完成时间的数组
double dengdai[N];//存储等待时间的数组
double zhouzhuan[N];//存储周转时间的数组
double daiquanz[N];//存储带权周转时间的数组
string name[N];//每个作业的名字
int main()
{
//先来先服务调度算法
cout<<"请输入作业数:"<<endl;
int n;//作业数
cin>>n;
cout<<"请按照顺序分别输入n个作业的名字、到达时间和运行时间(h):"<<endl;
for(int i=0;i<n;i++)
{
cin>>name[i];//作业的名字 比如A B C 之类的
cin>>daoda[i]>>yunxing[i];//初始条件 存入到达时间和运行时间
}
for(int i=0;i<n;i++)//选择排序法 根据到达时间从小到大进行排序
{
for(int j=0;j<n;j++)
{
if(daoda[i]<daoda[j])
{
swap(daoda[i],daoda[j]);//这下面这几步是为了同一个作业的这些时间对应的保持一致
swap(yunxing[i],yunxing[j]);//当到达时间交换了,对应的其他时间也应该交换
swap(kaishi[i],kaishi[j]);
swap(dengdai[i],dengdai[j]);
swap(zhouzhuan[i],zhouzhuan[j]);
swap(daiquanz[i],daiquanz[i]);
swap(name[i],name[j]);//作业的名字也要跟着作业排序的变化而变化
}
}
}
kaishi[0]=daoda[0];//最先到达的作业的开始时间为到达时间
dengdai[0]=kaishi[0]-daoda[0];
wancheng[0]=yunxing[0]+kaishi[0];//第一个进程的完成时间 就是运行时间+开始时间
zhouzhuan[0]=wancheng[0]-daoda[0]; //周转时间就是完成时间-到达时间
daiquanz[0]=zhouzhuan[0]/yunxing[0];//带权周转时间=周转时间/运行时间
for(int i=1;i<n;i++)
{
if(daoda[i]<wancheng[i-1])//当这个进程的到达时间小于上一个进程的完成时间时
{
kaishi[i]=kaishi[i-1]+yunxing[i-1];//开始时间=上一个作业的运行时间+开始时间 也就是上一个的完成时间
}
else// 当这个进程的到达时间不小于上一个进程的完成时间时
{
kaishi[i]=daoda[i];//开始时间=这个进程的到达时间
}
wancheng[i]=yunxing[i]+kaishi[i];//完成时间就是运行时间+开始时间
dengdai[i]=kaishi[i]-daoda[i];//等待时间就是开始时间-到达时间
zhouzhuan[i]=wancheng[i]-daoda[i]; //周转时间就是完成时间-到达时间
daiquanz[i]=zhouzhuan[i]/yunxing[i];//带权周转时间=周转时间/运行时间
}
for(int i=0;i<n;i++)
{
cout<<"作业"<<name[i]<<":";
cout<<"到达时间:"<<daoda[i]<<"\t"<<"运行时间:"<<yunxing[i]<<"\t";
cout<<"开始时间:"<<kaishi[i]<<"\t"<<"完成时间:"<<wancheng[i]<<"\t"<<"等待时间:"<<dengdai[i]<<"\t";
cout<<"周转时间:"<<zhouzhuan[i]<<"\t"<<"带权周转时间:"<<daiquanz[i]<<endl;
}
double sum1=0;
double sum2=0;
for(int i=0;i<n;i++)
{
sum1+=zhouzhuan[i];//计算周转时间的和
sum2+=daiquanz[i]; //计算带权周转时间的和
}
cout<<"平均周转时间:"<<sum1/n<<endl;//平均周转时间=周转时间/作业数量
cout<<"平均带权周转时间:"<<sum2/n<<endl;//平均带权周转时间=带权周转时间/作业数量
return 0;
}
运行结果
设计思路:一开始定义了七个double类型的数组,用来分别存储到达时间、运行时间、开始时间、完成时间、等待时间、周转时间、带权周转时间,定义一个string类型的数组,用来存储每个作业的进程名;然后在主函数中用户输入作业数目和进程名、到达时间和运行时间;利用选择排序算法根据到达时间从小到大进行排序,顺便在这个算法中交换到达时间的顺序的时候,其余的七个数组的顺序也交换,保证每个进程的每个时间一一对应;然后开始根据公式计算每个时间(公式已在程序注释中写明),注意判断到达时间和上一个进程的完成时间的比较,最后输出相应的信息。