FCFS先来先服务调度算法实现及测试

#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;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值