版权声明:个人博客网址 https://29dch.github.io/ GitHub网址 https://github.com/29DCH,欢迎大家前来交流探讨和star+fork! 转载请注明出处! https://blog.csdn.net/CowBoySoBusy/article/details/84576393
实验内容:本实验首先输入进程的个数,然后输入进程名称,最后输入每个进程提交到系统的时间和每个进程所需要的处理时间。然后通过模拟程序,显示以下信息:
1)处理机对进程的调度过程。
2)计算这N个进程的平均周转时间。
注意:
1、 作业在运行过程中不能抢断,只有作业运行完毕才能允许其它作业运行。
2、 如果两个作业的处理时间相等,则提交时间早的优先执行。
输入:
4
A 0.1 5
B 0.1 3
C 2 3
D 5 8
输出:
这里输出样例有点问题,应该是8.05
代码:
#include <bits/stdc++.h>
using namespace std;
struct sjf
{
string name;
double s_time,p_time,sta_time,fin_time;
} SJF[1000];
bool cmp(sjf a,sjf b)
{
if(a.p_time==b.p_time)
return a.s_time<b.s_time;
return a.p_time<b.p_time;
}
bool cmp1(sjf a,sjf b)
{
if(a.s_time==b.s_time)
return a.p_time<b.p_time;
return a.s_time<b.s_time;
}
int main()
{
int n,k,j,temp;
double sum;
while(cin>>n)
{
sum=0.0;
for(int i=0; i<n; i++)
cin>>SJF[i].name>>SJF[i].s_time>>SJF[i].p_time;
sort(SJF,SJF+n,cmp1);
for(int i=0; i<n-1; i++)
{
k=0,j=0;
for(j=i+1; j<n; j++)
{
if(SJF[j].s_time<SJF[i].p_time)
k++;
}
temp=i+1;
sort(SJF+temp,SJF+temp+k,cmp);
}
for(int i=0; i<n; i++)
{
if(!i)
{
SJF[i].sta_time= SJF[i].s_time;
SJF[i].fin_time=SJF[i].sta_time+SJF[i].p_time;
}
else
{
SJF[i].sta_time= SJF[i-1].fin_time;
SJF[i].fin_time=SJF[i].sta_time+SJF[i].p_time;
}
}
cout<<"作业号 "<<"提交时间 "<<"所需时间 "<<"开始时间 "<<"完成时间"<<endl;
for(int i=0; i<n; i++)
cout<<SJF[i].name<<"\t"<<SJF[i].s_time<<"\t"<<SJF[i].p_time<<"\t"<<SJF[i].sta_time<<"\t"<<SJF[i].fin_time<<endl;
for(int i=0; i<n; i++)
{
sum+=(SJF[i].fin_time-SJF[i].s_time);
}
cout<<"平均周转时间为: "<<sum/n*1.0<<endl;
}
return 0;
}