先来先服务,短作业优先,最高响应比三种算法下求平均周转和带权周转时间的实现
2007-12-06 19:48
501 查看
codear发表于 2006年04月11日 21:20:00 (http://blog.csdn.net/coDear)
function hide(){showComment();}
#include<iostream.h>
#define N 6
struct time{
float arriveTime;
float runTime;
float finishTime;
float totalTime;
float weightTotalTime;
char name;
};
void InputTime(time *p)
{
int i;//counter
cout<<"input name & arrive time & run time:"<<endl;
for(i=0;i<=N-1;i++){
float temp1,temp2;
char name;
cout<<"作业名:"<<endl;
cin>>name;
p[i].name=name;
cout<<"到达时:"<<endl;
cin>>temp1;
p[i].arriveTime=temp1;
cout<<"运行时间:"<<endl;
cin>>temp2;
p[i].runTime=temp2;
}
}
void Print(time *p,float totalTimeSum,float weightTotalTimeSum){
cout<<"运行次序:"<<endl;
for(int k=0;k<=N-1;k++)
{
cout<<p[k].name<<" ";
}
cout<<endl;
cout<<"平均周转时间:"<<totalTimeSum/N<<endl;
cout<<"平均带权周转时间:"<<weightTotalTimeSum/N<<endl;
}
void sort(time *p)
{
for(int i=0;i<=N-1;i++)
for(int j=0;j<=i;j++)
if(p[i].arriveTime<p[j].arriveTime)
{
time temp;
temp=p[i];
p[i]=p[j];
p[j]=temp;
}
}
void deal(time *p,float &totalTimeSum,float &weightTotalTimeSum)
{
int k;//counter
for(k=0;k<=N-1;k++)
{
if(k==0)
p[k].finishTime=p[k].arriveTime+p[k].runTime;
else
p[k].finishTime=p[k-1].finishTime+p[k].runTime;
}
for(k=0;k<=N-1;k++)
{
p[k].totalTime=p[k].finishTime-p[k].arriveTime;
p[k].weightTotalTime=p[k].totalTime/p[k].runTime;
totalTimeSum+=p[k].totalTime;
weightTotalTimeSum+=p[k].weightTotalTime;
}
}
void FCFS(time *p)
{
float totalTimeSum=0,weightTotalTimeSum=0;
sort(p);
deal(p,totalTimeSum,weightTotalTimeSum);
cout<<"先来先服务:"<<endl;
Print(p,totalTimeSum,weightTotalTimeSum);
}
void SWF(time *p)
{
float totalTimeSum=0,weightTotalTimeSum=0;
sort(p);
for(int m=0;m<N-1;m++)
{
if(m==0)
p[m].finishTime=p[m].arriveTime+p[m].runTime;
else
p[m].finishTime=p[m-1].finishTime+p[m].runTime;
int i=0;
for(int n=m+1;n<=N-1;n++)
{
if(p
.arriveTime<=p[m].finishTime)
i++;
}
float min=p[m+1].runTime;
int follow=m+1;
for(int k=m+1;k<m+i;k++)
{
if(p[k+1].runTime<min)
{min=p[k+1].runTime;
follow=k+1;}
}
time temp;
temp=p[m+1];
p[m+1]=p[follow];
p[follow]=temp;
}
deal(p,totalTimeSum,weightTotalTimeSum);
cout<<"短作业优先:"<<endl;
Print(p,totalTimeSum,weightTotalTimeSum);
}
void TRRF(time *p){
float totalTimeSum=0,weightTotalTimeSum=0;
sort(p);
for(int m=0;m<N-1;m++)
{
if(m==0)
p[m].finishTime=p[m].arriveTime+p[m].runTime;
else
p[m].finishTime=p[m-1].finishTime+p[m].runTime;
int i=0;
for(int n=m+1;n<=N-1;n++)
{
if(p
.arriveTime<=p[m].finishTime)
i++;
}
float max=(p[m].finishTime-p[m+1].arriveTime)/p[m+1].runTime;
int follow=m+1;
for(int k=m+1;k<m+i;k++)
{
if(max<=(p[m].finishTime-p[k+1].arriveTime)/p[k+1].runTime){
max=(p[m].finishTime-p[k+1].arriveTime)/p[k+1].runTime;
follow=k+1;
}
}
time temp;
temp=p[m+1];
p[m+1]=p[follow];
p[follow]=temp;
}
deal(p,totalTimeSum,weightTotalTimeSum);
cout<<"最高响应比优先:"<<endl;
Print(p,totalTimeSum,weightTotalTimeSum);
}
void main(){
time a
;
InputTime(a);
time *b=a;time *c=a;
FCFS(a);
SWF(b);
TRRF(c);
}
/*
input name & arrive time & run time:
作业名:
a
到达时:
0
运行时间:
6
作业名:
b
到达时:
2
运行时间:
50
作业名:
c
到达时:
5
运行时间:
20
作业名:
d
到达时:
5
运行时间:
10
作业名:
e
到达时:
12
运行时间:
40
作业名:
f
到达时:
15
运行时间:
8
先来先服务:
运行次序:
a b c d e f
平均周转时间:74.1667
平均带权周转时间:5.2425
短作业优先:
运行次序:
a d f c e b
平均周转时间:44.8333
平均带权周转时间:1.6025
最高响应比优先:
运行次序:
a d c f b e
平均周转时间:48.5
平均带权周转时间:2.0275
Press any key to continue
*/
function hide(){showComment();}
#include<iostream.h>
#define N 6
struct time{
float arriveTime;
float runTime;
float finishTime;
float totalTime;
float weightTotalTime;
char name;
};
void InputTime(time *p)
{
int i;//counter
cout<<"input name & arrive time & run time:"<<endl;
for(i=0;i<=N-1;i++){
float temp1,temp2;
char name;
cout<<"作业名:"<<endl;
cin>>name;
p[i].name=name;
cout<<"到达时:"<<endl;
cin>>temp1;
p[i].arriveTime=temp1;
cout<<"运行时间:"<<endl;
cin>>temp2;
p[i].runTime=temp2;
}
}
void Print(time *p,float totalTimeSum,float weightTotalTimeSum){
cout<<"运行次序:"<<endl;
for(int k=0;k<=N-1;k++)
{
cout<<p[k].name<<" ";
}
cout<<endl;
cout<<"平均周转时间:"<<totalTimeSum/N<<endl;
cout<<"平均带权周转时间:"<<weightTotalTimeSum/N<<endl;
}
void sort(time *p)
{
for(int i=0;i<=N-1;i++)
for(int j=0;j<=i;j++)
if(p[i].arriveTime<p[j].arriveTime)
{
time temp;
temp=p[i];
p[i]=p[j];
p[j]=temp;
}
}
void deal(time *p,float &totalTimeSum,float &weightTotalTimeSum)
{
int k;//counter
for(k=0;k<=N-1;k++)
{
if(k==0)
p[k].finishTime=p[k].arriveTime+p[k].runTime;
else
p[k].finishTime=p[k-1].finishTime+p[k].runTime;
}
for(k=0;k<=N-1;k++)
{
p[k].totalTime=p[k].finishTime-p[k].arriveTime;
p[k].weightTotalTime=p[k].totalTime/p[k].runTime;
totalTimeSum+=p[k].totalTime;
weightTotalTimeSum+=p[k].weightTotalTime;
}
}
void FCFS(time *p)
{
float totalTimeSum=0,weightTotalTimeSum=0;
sort(p);
deal(p,totalTimeSum,weightTotalTimeSum);
cout<<"先来先服务:"<<endl;
Print(p,totalTimeSum,weightTotalTimeSum);
}
void SWF(time *p)
{
float totalTimeSum=0,weightTotalTimeSum=0;
sort(p);
for(int m=0;m<N-1;m++)
{
if(m==0)
p[m].finishTime=p[m].arriveTime+p[m].runTime;
else
p[m].finishTime=p[m-1].finishTime+p[m].runTime;
int i=0;
for(int n=m+1;n<=N-1;n++)
{
if(p
.arriveTime<=p[m].finishTime)
i++;
}
float min=p[m+1].runTime;
int follow=m+1;
for(int k=m+1;k<m+i;k++)
{
if(p[k+1].runTime<min)
{min=p[k+1].runTime;
follow=k+1;}
}
time temp;
temp=p[m+1];
p[m+1]=p[follow];
p[follow]=temp;
}
deal(p,totalTimeSum,weightTotalTimeSum);
cout<<"短作业优先:"<<endl;
Print(p,totalTimeSum,weightTotalTimeSum);
}
void TRRF(time *p){
float totalTimeSum=0,weightTotalTimeSum=0;
sort(p);
for(int m=0;m<N-1;m++)
{
if(m==0)
p[m].finishTime=p[m].arriveTime+p[m].runTime;
else
p[m].finishTime=p[m-1].finishTime+p[m].runTime;
int i=0;
for(int n=m+1;n<=N-1;n++)
{
if(p
.arriveTime<=p[m].finishTime)
i++;
}
float max=(p[m].finishTime-p[m+1].arriveTime)/p[m+1].runTime;
int follow=m+1;
for(int k=m+1;k<m+i;k++)
{
if(max<=(p[m].finishTime-p[k+1].arriveTime)/p[k+1].runTime){
max=(p[m].finishTime-p[k+1].arriveTime)/p[k+1].runTime;
follow=k+1;
}
}
time temp;
temp=p[m+1];
p[m+1]=p[follow];
p[follow]=temp;
}
deal(p,totalTimeSum,weightTotalTimeSum);
cout<<"最高响应比优先:"<<endl;
Print(p,totalTimeSum,weightTotalTimeSum);
}
void main(){
time a
;
InputTime(a);
time *b=a;time *c=a;
FCFS(a);
SWF(b);
TRRF(c);
}
/*
input name & arrive time & run time:
作业名:
a
到达时:
0
运行时间:
6
作业名:
b
到达时:
2
运行时间:
50
作业名:
c
到达时:
5
运行时间:
20
作业名:
d
到达时:
5
运行时间:
10
作业名:
e
到达时:
12
运行时间:
40
作业名:
f
到达时:
15
运行时间:
8
先来先服务:
运行次序:
a b c d e f
平均周转时间:74.1667
平均带权周转时间:5.2425
短作业优先:
运行次序:
a d f c e b
平均周转时间:44.8333
平均带权周转时间:1.6025
最高响应比优先:
运行次序:
a d c f b e
平均周转时间:48.5
平均带权周转时间:2.0275
Press any key to continue
*/
相关文章推荐
- [置顶] Java模拟最短作业优先、时间片轮转、最高响应比三种进程调度算法
- 操作系统中和时间的有关的几个概念:吞吐率(流水线完成时间)、平均周转时间和平均带权周转时间、最高响应比优先
- 操作系统中和时间的有关的几个概念:吞吐率(流水线完成时间)、平均周转时间和平均带权周转时间、最高响应比优先
- 操作系统中先来先服务、短作业优先、最高相应比优先三个进程数组实现的算法
- java_实现先来先服务(FCFS)短作业优先算法(SJF)
- 假设系统按单值方式运行且采用最短作业优先算法,有J1,J2,J3,J4共4个作业同时到达,则以下哪几种情况下的平均周转时间为10分钟?
- 作业调度算法之短作业优先调度算法和先来先服务调度算法
- 计算机操作系统调度算法——短作业优先算法简单实现
- 《操作系统》 先来先服务FCFS和短作业优先SJF进程调度算法相关计算及实验
- 先来先服务和短作业优先算法
- Java实现先来先服务与短作业优先
- Java模拟操作系统进程调度算法—先来先服务、短作业优先、高响比优先
- 处理机调度问题以及求响应比,作业周转时间和平均周转时间
- 先来先服务FCFS和短作业优先SJF进程调度算法
- Java模拟操作系统进程调度算法—先来先服务、短作业优先、高响比优先
- 详解js实现线段交点的三种算法
- 如何设计实现真正的响应式微服务系统?
- Linux-C基础知识学习:C语言作业-将5个学生成绩保存在一个数组中,单独实现一个计算平均成绩的average函数, 在main函数中获取该函数返回的平均值,并打印。
- 输出学生成绩。本题要求编写程序,根据输入学生的成绩,统计并输出学生的平均成绩、最高成绩和最低成绩。建议使用动态内存分配来实现。
- 白话经典算法系列之一 冒泡排序的三种实现