磁盘调度.docx
《磁盘调度.docx》由会员分享,可在线阅读,更多相关《磁盘调度.docx(18页珍藏版)》请在冰豆网上搜索。
磁盘调度
实验报告
课程名称
操作系统
题目
实验4:
姓名
实验地点
实验楼B软件实习基地
学号
1.实验目的
磁盘是高速、大容量、旋转型、可直接存取的存储设备。
系统可采用一种策略,尽可能按最佳次序执行访问磁盘的请求。
由于磁盘访问时间主要受寻道时间T的影响,为此需要采用合适的寻道算法,以降低寻道时间。
本实验要求学生模拟设计一个磁盘调度程序,观察调度程序的动态运行过程。
通过实验让学生理解和掌握磁盘调度的职能。
2.实验要求
1.要求以个人为单位完成全部实验题目,并在下课前五分钟将本次实验课完成的内容打包发送至指定邮箱;
2.前十名完成实验的同学在教师检查后可以获得一次实验加分;
3.实验课进行过程中不得进行浏览网页、玩游戏等与课程无关内容,违法规定的应给予课程判定不及格的处分;
4.实验课进行过程中应严格遵守实验室相关规定,按照老师的要求完成相关设计任务。
3.实验内容
1、模拟电梯调度算法,对磁盘进行移臂操作
2、假设磁盘只有一个盘面,并且磁盘是可移动头磁盘。
为了模拟以上两个进程的执行,可以考虑使用随机数来确定二者的允许顺序,程序结构图参考附图:
3、“接受请求”进程建立一张“进程请求I/O”表,指出等待访问磁盘的进程要求访问的磁道,表的格式如下:
进程名
要求访问的磁道号
4、“磁盘调度”的功能是查“请求I/O”表,当有等待访问的进程时,按电梯调度算法(SCAN算法)从中选择一个等待访问的进程,按其指定的要求访问磁道。
SCAN算法参考课本第九章。
算法模拟框图略。
5、附图中的“初始化”工作包括:
初始化“请求I/O”表,设置置当前移臂方向;当前磁道号。
并且假设程序运行前“请求I/O”表中已有若干进程(4~8个)申请访问相应磁道。
4.数据结构与算法设计
1.数据结构
主要用到的函数如下:
intdecide(charstr[])//判断输入数据是否有效
inttrans(charstr[],inta)//将字符串转换成数字
int*bubble(intcidao[],intm)//按从小到大排序
voidFCFS(intcidao[],intm)//先来先服务调度算法
voidSSTF(intcidao[],intm)//最短寻道时间优先调度算法
voidSCAN(intcidao[],intm)//扫描调度算法
voidCSCAN(intcidao[],intm)//循环扫描调度算法
2.算法设计
⑴算法设计思想
设备的动态分配算法与进程调度相似,也是基于一定的分配策略的。
常用的分配策略有先请求先分配、优先级高者先分配等策略。
在多道程序系统中,低效率通常是由于磁盘类旋转设备使用不当造成的。
操作系统中,对磁盘的访问要求来自多方面,常常需要排队。
这时,对众多的访问要求按一定的次序响应,会直接影响磁盘的工作效率,进而影响系统的性能。
访问磁盘的时间因子由3部分构成,它们是查找(查找磁道)时间、等待(旋转等待扇区)时间和数据传输时间,其中查找时间是决定因素。
因此磁盘调度算法先考虑优化查找策略,需要时再优化旋转等待策略。
⑵算法设计流程图
FCFS算法流程图:
SSTF算法流程图:
SCAN算法流程图:
CSCAN算法流程图:
5.实验总结与问题分析
通过此次实验,我对操作系统的基础知识了解得更深了,同时对磁盘调度的四种算法——先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、扫描算法(SCAN)、循环扫描算法(CSCAN)有了更深刻的理解和掌握,使我能够为磁盘调度选择适当的算法,提高CPU工作效率。
实验过程中遇到的问题在老师和同学的帮助下顺利解决,我深刻认识到算法的逻辑性对程序的重要影响,算法的准确度对程序运行结果的重要影响,这对我以后在操作系统的学习中有极大帮助。
实验
成绩
指导
教师
源程序:
#include
#definemaxsize1000
/*********************判断输入数据是否有效**************************/
{
inti=0;
while(str[i]!
='\0')
if(str[i]<'0'||str[i]>'9')
return0;
break;
}
i++;
returni;
/******************将字符串转换成数字***********************/
inti;
intsum=0;
for(i=0;i{sum=sum+(int)((str[i]-'0')*pow(10,a-i-1));}returnsum;}/*********************冒泡排序算法**************************/int*bubble(intcidao[],intm){inti,j;inttemp;for(i=0;ifor(j=i+1;j{if(cidao[i]>cidao[j]){temp=cidao[i];cidao[i]=cidao[j];cidao[j]=temp;}}cout<<"排序后的磁盘序列为:";for(i=0;i{cout<}cout<returncidao;}/*********************先来先服务调度算法**************************/voidFCFS(intcidao[],intm)//磁道号数组,个数为m{intnow;//当前磁道号intsum=0;//总寻道长度intj,i;inta;charstr[100];floatave;//平均寻道长度cout<<"磁盘请求序列为:";for(i=0;i{cout<}cout<cout<<"请输入当前的磁道号:";B:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoB;}elsenow=trans(str,a);//输入当前磁道号sum+=abs(cidao[0]-now);cout<<"磁盘扫描序列为:";for(i=0;i{cout<}for(i=0,j=1;j{sum+=abs(cidao[j]-cidao[i]);ave=(float)(sum)/(float)(m);}cout<cout<<"平均寻道长度:"<}/**********************最短寻道时间优先调度算法********************/voidSSTF(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";C:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoC;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;while((l>=0)&&(r{if((now-cidao[l])<=(cidao[r]-now))//选择与当前磁道最近的请求给予服务{cout<sum+=now-cidao[l];now=cidao[l];l=l-1;}else{cout<sum+=cidao[r]-now;now=cidao[r];r=r+1;}}if(l==-1)//磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道{for(j=r;j{cout<}sum+=cidao[m-1]-cidao[0];}else//磁头移动到序列的最大号,返回内侧扫描仍未扫描的磁道{for(j=l;j>=0;j--){cout<}sum+=cidao[m-1]-cidao[0];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/*****************************扫描调度算法*******************************/voidSCAN(intcidao[],intm)//先要给出当前磁道号和移动臂的移动方向{intk=1;intnow,l,r,d;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";D:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoD;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
sum=sum+(int)((str[i]-'0')*pow(10,a-i-1));
returnsum;
/*********************冒泡排序算法**************************/
int*bubble(intcidao[],intm)
inti,j;
inttemp;
for(i=0;ifor(j=i+1;j{if(cidao[i]>cidao[j]){temp=cidao[i];cidao[i]=cidao[j];cidao[j]=temp;}}cout<<"排序后的磁盘序列为:";for(i=0;i{cout<}cout<returncidao;}/*********************先来先服务调度算法**************************/voidFCFS(intcidao[],intm)//磁道号数组,个数为m{intnow;//当前磁道号intsum=0;//总寻道长度intj,i;inta;charstr[100];floatave;//平均寻道长度cout<<"磁盘请求序列为:";for(i=0;i{cout<}cout<cout<<"请输入当前的磁道号:";B:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoB;}elsenow=trans(str,a);//输入当前磁道号sum+=abs(cidao[0]-now);cout<<"磁盘扫描序列为:";for(i=0;i{cout<}for(i=0,j=1;j{sum+=abs(cidao[j]-cidao[i]);ave=(float)(sum)/(float)(m);}cout<cout<<"平均寻道长度:"<}/**********************最短寻道时间优先调度算法********************/voidSSTF(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";C:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoC;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;while((l>=0)&&(r{if((now-cidao[l])<=(cidao[r]-now))//选择与当前磁道最近的请求给予服务{cout<sum+=now-cidao[l];now=cidao[l];l=l-1;}else{cout<sum+=cidao[r]-now;now=cidao[r];r=r+1;}}if(l==-1)//磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道{for(j=r;j{cout<}sum+=cidao[m-1]-cidao[0];}else//磁头移动到序列的最大号,返回内侧扫描仍未扫描的磁道{for(j=l;j>=0;j--){cout<}sum+=cidao[m-1]-cidao[0];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/*****************************扫描调度算法*******************************/voidSCAN(intcidao[],intm)//先要给出当前磁道号和移动臂的移动方向{intk=1;intnow,l,r,d;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";D:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoD;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
for(j=i+1;j{if(cidao[i]>cidao[j]){temp=cidao[i];cidao[i]=cidao[j];cidao[j]=temp;}}cout<<"排序后的磁盘序列为:";for(i=0;i{cout<}cout<returncidao;}/*********************先来先服务调度算法**************************/voidFCFS(intcidao[],intm)//磁道号数组,个数为m{intnow;//当前磁道号intsum=0;//总寻道长度intj,i;inta;charstr[100];floatave;//平均寻道长度cout<<"磁盘请求序列为:";for(i=0;i{cout<}cout<cout<<"请输入当前的磁道号:";B:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoB;}elsenow=trans(str,a);//输入当前磁道号sum+=abs(cidao[0]-now);cout<<"磁盘扫描序列为:";for(i=0;i{cout<}for(i=0,j=1;j{sum+=abs(cidao[j]-cidao[i]);ave=(float)(sum)/(float)(m);}cout<cout<<"平均寻道长度:"<}/**********************最短寻道时间优先调度算法********************/voidSSTF(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";C:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoC;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;while((l>=0)&&(r{if((now-cidao[l])<=(cidao[r]-now))//选择与当前磁道最近的请求给予服务{cout<sum+=now-cidao[l];now=cidao[l];l=l-1;}else{cout<sum+=cidao[r]-now;now=cidao[r];r=r+1;}}if(l==-1)//磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道{for(j=r;j{cout<}sum+=cidao[m-1]-cidao[0];}else//磁头移动到序列的最大号,返回内侧扫描仍未扫描的磁道{for(j=l;j>=0;j--){cout<}sum+=cidao[m-1]-cidao[0];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/*****************************扫描调度算法*******************************/voidSCAN(intcidao[],intm)//先要给出当前磁道号和移动臂的移动方向{intk=1;intnow,l,r,d;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";D:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoD;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
if(cidao[i]>cidao[j])
temp=cidao[i];
cidao[i]=cidao[j];
cidao[j]=temp;
cout<<"排序后的磁盘序列为:
";
for(i=0;i{cout<}cout<returncidao;}/*********************先来先服务调度算法**************************/voidFCFS(intcidao[],intm)//磁道号数组,个数为m{intnow;//当前磁道号intsum=0;//总寻道长度intj,i;inta;charstr[100];floatave;//平均寻道长度cout<<"磁盘请求序列为:";for(i=0;i{cout<}cout<cout<<"请输入当前的磁道号:";B:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoB;}elsenow=trans(str,a);//输入当前磁道号sum+=abs(cidao[0]-now);cout<<"磁盘扫描序列为:";for(i=0;i{cout<}for(i=0,j=1;j{sum+=abs(cidao[j]-cidao[i]);ave=(float)(sum)/(float)(m);}cout<cout<<"平均寻道长度:"<}/**********************最短寻道时间优先调度算法********************/voidSSTF(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";C:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoC;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;while((l>=0)&&(r{if((now-cidao[l])<=(cidao[r]-now))//选择与当前磁道最近的请求给予服务{cout<sum+=now-cidao[l];now=cidao[l];l=l-1;}else{cout<sum+=cidao[r]-now;now=cidao[r];r=r+1;}}if(l==-1)//磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道{for(j=r;j{cout<}sum+=cidao[m-1]-cidao[0];}else//磁头移动到序列的最大号,返回内侧扫描仍未扫描的磁道{for(j=l;j>=0;j--){cout<}sum+=cidao[m-1]-cidao[0];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/*****************************扫描调度算法*******************************/voidSCAN(intcidao[],intm)//先要给出当前磁道号和移动臂的移动方向{intk=1;intnow,l,r,d;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";D:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoD;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<}cout<returncidao;}/*********************先来先服务调度算法**************************/voidFCFS(intcidao[],intm)//磁道号数组,个数为m{intnow;//当前磁道号intsum=0;//总寻道长度intj,i;inta;charstr[100];floatave;//平均寻道长度cout<<"磁盘请求序列为:";for(i=0;i{cout<}cout<cout<<"请输入当前的磁道号:";B:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoB;}elsenow=trans(str,a);//输入当前磁道号sum+=abs(cidao[0]-now);cout<<"磁盘扫描序列为:";for(i=0;i{cout<}for(i=0,j=1;j{sum+=abs(cidao[j]-cidao[i]);ave=(float)(sum)/(float)(m);}cout<cout<<"平均寻道长度:"<}/**********************最短寻道时间优先调度算法********************/voidSSTF(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";C:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoC;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;while((l>=0)&&(r{if((now-cidao[l])<=(cidao[r]-now))//选择与当前磁道最近的请求给予服务{cout<sum+=now-cidao[l];now=cidao[l];l=l-1;}else{cout<sum+=cidao[r]-now;now=cidao[r];r=r+1;}}if(l==-1)//磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道{for(j=r;j{cout<}sum+=cidao[m-1]-cidao[0];}else//磁头移动到序列的最大号,返回内侧扫描仍未扫描的磁道{for(j=l;j>=0;j--){cout<}sum+=cidao[m-1]-cidao[0];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/*****************************扫描调度算法*******************************/voidSCAN(intcidao[],intm)//先要给出当前磁道号和移动臂的移动方向{intk=1;intnow,l,r,d;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";D:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoD;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<returncidao;}/*********************先来先服务调度算法**************************/voidFCFS(intcidao[],intm)//磁道号数组,个数为m{intnow;//当前磁道号intsum=0;//总寻道长度intj,i;inta;charstr[100];floatave;//平均寻道长度cout<<"磁盘请求序列为:";for(i=0;i{cout<}cout<cout<<"请输入当前的磁道号:";B:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoB;}elsenow=trans(str,a);//输入当前磁道号sum+=abs(cidao[0]-now);cout<<"磁盘扫描序列为:";for(i=0;i{cout<}for(i=0,j=1;j{sum+=abs(cidao[j]-cidao[i]);ave=(float)(sum)/(float)(m);}cout<cout<<"平均寻道长度:"<}/**********************最短寻道时间优先调度算法********************/voidSSTF(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";C:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoC;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;while((l>=0)&&(r{if((now-cidao[l])<=(cidao[r]-now))//选择与当前磁道最近的请求给予服务{cout<sum+=now-cidao[l];now=cidao[l];l=l-1;}else{cout<sum+=cidao[r]-now;now=cidao[r];r=r+1;}}if(l==-1)//磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道{for(j=r;j{cout<}sum+=cidao[m-1]-cidao[0];}else//磁头移动到序列的最大号,返回内侧扫描仍未扫描的磁道{for(j=l;j>=0;j--){cout<}sum+=cidao[m-1]-cidao[0];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/*****************************扫描调度算法*******************************/voidSCAN(intcidao[],intm)//先要给出当前磁道号和移动臂的移动方向{intk=1;intnow,l,r,d;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";D:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoD;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
returncidao;
/*********************先来先服务调度算法**************************/
voidFCFS(intcidao[],intm)//磁道号数组,个数为m
intnow;//当前磁道号
intsum=0;//总寻道长度
intj,i;
inta;
charstr[100];
floatave;//平均寻道长度
cout<<"磁盘请求序列为:
for(i=0;i{cout<}cout<cout<<"请输入当前的磁道号:";B:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoB;}elsenow=trans(str,a);//输入当前磁道号sum+=abs(cidao[0]-now);cout<<"磁盘扫描序列为:";for(i=0;i{cout<}for(i=0,j=1;j{sum+=abs(cidao[j]-cidao[i]);ave=(float)(sum)/(float)(m);}cout<cout<<"平均寻道长度:"<}/**********************最短寻道时间优先调度算法********************/voidSSTF(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";C:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoC;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;while((l>=0)&&(r{if((now-cidao[l])<=(cidao[r]-now))//选择与当前磁道最近的请求给予服务{cout<sum+=now-cidao[l];now=cidao[l];l=l-1;}else{cout<sum+=cidao[r]-now;now=cidao[r];r=r+1;}}if(l==-1)//磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道{for(j=r;j{cout<}sum+=cidao[m-1]-cidao[0];}else//磁头移动到序列的最大号,返回内侧扫描仍未扫描的磁道{for(j=l;j>=0;j--){cout<}sum+=cidao[m-1]-cidao[0];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/*****************************扫描调度算法*******************************/voidSCAN(intcidao[],intm)//先要给出当前磁道号和移动臂的移动方向{intk=1;intnow,l,r,d;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";D:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoD;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<}cout<cout<<"请输入当前的磁道号:";B:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoB;}elsenow=trans(str,a);//输入当前磁道号sum+=abs(cidao[0]-now);cout<<"磁盘扫描序列为:";for(i=0;i{cout<}for(i=0,j=1;j{sum+=abs(cidao[j]-cidao[i]);ave=(float)(sum)/(float)(m);}cout<cout<<"平均寻道长度:"<}/**********************最短寻道时间优先调度算法********************/voidSSTF(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";C:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoC;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;while((l>=0)&&(r{if((now-cidao[l])<=(cidao[r]-now))//选择与当前磁道最近的请求给予服务{cout<sum+=now-cidao[l];now=cidao[l];l=l-1;}else{cout<sum+=cidao[r]-now;now=cidao[r];r=r+1;}}if(l==-1)//磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道{for(j=r;j{cout<}sum+=cidao[m-1]-cidao[0];}else//磁头移动到序列的最大号,返回内侧扫描仍未扫描的磁道{for(j=l;j>=0;j--){cout<}sum+=cidao[m-1]-cidao[0];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/*****************************扫描调度算法*******************************/voidSCAN(intcidao[],intm)//先要给出当前磁道号和移动臂的移动方向{intk=1;intnow,l,r,d;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";D:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoD;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<cout<<"请输入当前的磁道号:";B:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoB;}elsenow=trans(str,a);//输入当前磁道号sum+=abs(cidao[0]-now);cout<<"磁盘扫描序列为:";for(i=0;i{cout<}for(i=0,j=1;j{sum+=abs(cidao[j]-cidao[i]);ave=(float)(sum)/(float)(m);}cout<cout<<"平均寻道长度:"<}/**********************最短寻道时间优先调度算法********************/voidSSTF(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";C:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoC;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;while((l>=0)&&(r{if((now-cidao[l])<=(cidao[r]-now))//选择与当前磁道最近的请求给予服务{cout<sum+=now-cidao[l];now=cidao[l];l=l-1;}else{cout<sum+=cidao[r]-now;now=cidao[r];r=r+1;}}if(l==-1)//磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道{for(j=r;j{cout<}sum+=cidao[m-1]-cidao[0];}else//磁头移动到序列的最大号,返回内侧扫描仍未扫描的磁道{for(j=l;j>=0;j--){cout<}sum+=cidao[m-1]-cidao[0];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/*****************************扫描调度算法*******************************/voidSCAN(intcidao[],intm)//先要给出当前磁道号和移动臂的移动方向{intk=1;intnow,l,r,d;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";D:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoD;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<<"请输入当前的磁道号:
B:
cin>>str;//对输入数据进行有效性判断
a=decide(str);
if(a==0)
cout<<"输入数据的类型错误,请重新输入!
"<gotoB;}elsenow=trans(str,a);//输入当前磁道号sum+=abs(cidao[0]-now);cout<<"磁盘扫描序列为:";for(i=0;i{cout<}for(i=0,j=1;j{sum+=abs(cidao[j]-cidao[i]);ave=(float)(sum)/(float)(m);}cout<cout<<"平均寻道长度:"<}/**********************最短寻道时间优先调度算法********************/voidSSTF(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";C:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoC;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;while((l>=0)&&(r{if((now-cidao[l])<=(cidao[r]-now))//选择与当前磁道最近的请求给予服务{cout<sum+=now-cidao[l];now=cidao[l];l=l-1;}else{cout<sum+=cidao[r]-now;now=cidao[r];r=r+1;}}if(l==-1)//磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道{for(j=r;j{cout<}sum+=cidao[m-1]-cidao[0];}else//磁头移动到序列的最大号,返回内侧扫描仍未扫描的磁道{for(j=l;j>=0;j--){cout<}sum+=cidao[m-1]-cidao[0];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/*****************************扫描调度算法*******************************/voidSCAN(intcidao[],intm)//先要给出当前磁道号和移动臂的移动方向{intk=1;intnow,l,r,d;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";D:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoD;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
gotoB;
else
now=trans(str,a);//输入当前磁道号
sum+=abs(cidao[0]-now);
cout<<"磁盘扫描序列为:
for(i=0;i{cout<}for(i=0,j=1;j{sum+=abs(cidao[j]-cidao[i]);ave=(float)(sum)/(float)(m);}cout<cout<<"平均寻道长度:"<}/**********************最短寻道时间优先调度算法********************/voidSSTF(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";C:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoC;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;while((l>=0)&&(r{if((now-cidao[l])<=(cidao[r]-now))//选择与当前磁道最近的请求给予服务{cout<sum+=now-cidao[l];now=cidao[l];l=l-1;}else{cout<sum+=cidao[r]-now;now=cidao[r];r=r+1;}}if(l==-1)//磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道{for(j=r;j{cout<}sum+=cidao[m-1]-cidao[0];}else//磁头移动到序列的最大号,返回内侧扫描仍未扫描的磁道{for(j=l;j>=0;j--){cout<}sum+=cidao[m-1]-cidao[0];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/*****************************扫描调度算法*******************************/voidSCAN(intcidao[],intm)//先要给出当前磁道号和移动臂的移动方向{intk=1;intnow,l,r,d;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";D:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoD;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<}for(i=0,j=1;j{sum+=abs(cidao[j]-cidao[i]);ave=(float)(sum)/(float)(m);}cout<cout<<"平均寻道长度:"<}/**********************最短寻道时间优先调度算法********************/voidSSTF(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";C:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoC;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;while((l>=0)&&(r{if((now-cidao[l])<=(cidao[r]-now))//选择与当前磁道最近的请求给予服务{cout<sum+=now-cidao[l];now=cidao[l];l=l-1;}else{cout<sum+=cidao[r]-now;now=cidao[r];r=r+1;}}if(l==-1)//磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道{for(j=r;j{cout<}sum+=cidao[m-1]-cidao[0];}else//磁头移动到序列的最大号,返回内侧扫描仍未扫描的磁道{for(j=l;j>=0;j--){cout<}sum+=cidao[m-1]-cidao[0];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/*****************************扫描调度算法*******************************/voidSCAN(intcidao[],intm)//先要给出当前磁道号和移动臂的移动方向{intk=1;intnow,l,r,d;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";D:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoD;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
for(i=0,j=1;j{sum+=abs(cidao[j]-cidao[i]);ave=(float)(sum)/(float)(m);}cout<cout<<"平均寻道长度:"<}/**********************最短寻道时间优先调度算法********************/voidSSTF(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";C:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoC;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;while((l>=0)&&(r{if((now-cidao[l])<=(cidao[r]-now))//选择与当前磁道最近的请求给予服务{cout<sum+=now-cidao[l];now=cidao[l];l=l-1;}else{cout<sum+=cidao[r]-now;now=cidao[r];r=r+1;}}if(l==-1)//磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道{for(j=r;j{cout<}sum+=cidao[m-1]-cidao[0];}else//磁头移动到序列的最大号,返回内侧扫描仍未扫描的磁道{for(j=l;j>=0;j--){cout<}sum+=cidao[m-1]-cidao[0];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/*****************************扫描调度算法*******************************/voidSCAN(intcidao[],intm)//先要给出当前磁道号和移动臂的移动方向{intk=1;intnow,l,r,d;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";D:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoD;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
sum+=abs(cidao[j]-cidao[i]);
ave=(float)(sum)/(float)(m);
cout<cout<<"平均寻道长度:"<}/**********************最短寻道时间优先调度算法********************/voidSSTF(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";C:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoC;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;while((l>=0)&&(r{if((now-cidao[l])<=(cidao[r]-now))//选择与当前磁道最近的请求给予服务{cout<sum+=now-cidao[l];now=cidao[l];l=l-1;}else{cout<sum+=cidao[r]-now;now=cidao[r];r=r+1;}}if(l==-1)//磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道{for(j=r;j{cout<}sum+=cidao[m-1]-cidao[0];}else//磁头移动到序列的最大号,返回内侧扫描仍未扫描的磁道{for(j=l;j>=0;j--){cout<}sum+=cidao[m-1]-cidao[0];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/*****************************扫描调度算法*******************************/voidSCAN(intcidao[],intm)//先要给出当前磁道号和移动臂的移动方向{intk=1;intnow,l,r,d;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";D:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoD;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<<"平均寻道长度:
"<}/**********************最短寻道时间优先调度算法********************/voidSSTF(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";C:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoC;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;while((l>=0)&&(r{if((now-cidao[l])<=(cidao[r]-now))//选择与当前磁道最近的请求给予服务{cout<sum+=now-cidao[l];now=cidao[l];l=l-1;}else{cout<sum+=cidao[r]-now;now=cidao[r];r=r+1;}}if(l==-1)//磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道{for(j=r;j{cout<}sum+=cidao[m-1]-cidao[0];}else//磁头移动到序列的最大号,返回内侧扫描仍未扫描的磁道{for(j=l;j>=0;j--){cout<}sum+=cidao[m-1]-cidao[0];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/*****************************扫描调度算法*******************************/voidSCAN(intcidao[],intm)//先要给出当前磁道号和移动臂的移动方向{intk=1;intnow,l,r,d;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";D:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoD;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
/**********************最短寻道时间优先调度算法********************/
voidSSTF(intcidao[],intm)
intk=1;
intnow,l,r;
inti,j,sum=0;
floatave;
cidao=bubble(cidao,m);//调用冒泡排序算法排序
C:
"<gotoC;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;while((l>=0)&&(r{if((now-cidao[l])<=(cidao[r]-now))//选择与当前磁道最近的请求给予服务{cout<sum+=now-cidao[l];now=cidao[l];l=l-1;}else{cout<sum+=cidao[r]-now;now=cidao[r];r=r+1;}}if(l==-1)//磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道{for(j=r;j{cout<}sum+=cidao[m-1]-cidao[0];}else//磁头移动到序列的最大号,返回内侧扫描仍未扫描的磁道{for(j=l;j>=0;j--){cout<}sum+=cidao[m-1]-cidao[0];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/*****************************扫描调度算法*******************************/voidSCAN(intcidao[],intm)//先要给出当前磁道号和移动臂的移动方向{intk=1;intnow,l,r,d;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";D:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoD;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
gotoC;
if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务
for(i=m-1;i>=0;i--)
cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;while((l>=0)&&(r{if((now-cidao[l])<=(cidao[r]-now))//选择与当前磁道最近的请求给予服务{cout<sum+=now-cidao[l];now=cidao[l];l=l-1;}else{cout<sum+=cidao[r]-now;now=cidao[r];r=r+1;}}if(l==-1)//磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道{for(j=r;j{cout<}sum+=cidao[m-1]-cidao[0];}else//磁头移动到序列的最大号,返回内侧扫描仍未扫描的磁道{for(j=l;j>=0;j--){cout<}sum+=cidao[m-1]-cidao[0];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/*****************************扫描调度算法*******************************/voidSCAN(intcidao[],intm)//先要给出当前磁道号和移动臂的移动方向{intk=1;intnow,l,r,d;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";D:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoD;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
sum=now-cidao[0];
if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务
for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;while((l>=0)&&(r{if((now-cidao[l])<=(cidao[r]-now))//选择与当前磁道最近的请求给予服务{cout<sum+=now-cidao[l];now=cidao[l];l=l-1;}else{cout<sum+=cidao[r]-now;now=cidao[r];r=r+1;}}if(l==-1)//磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道{for(j=r;j{cout<}sum+=cidao[m-1]-cidao[0];}else//磁头移动到序列的最大号,返回内侧扫描仍未扫描的磁道{for(j=l;j>=0;j--){cout<}sum+=cidao[m-1]-cidao[0];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/*****************************扫描调度算法*******************************/voidSCAN(intcidao[],intm)//先要给出当前磁道号和移动臂的移动方向{intk=1;intnow,l,r,d;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";D:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoD;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;while((l>=0)&&(r{if((now-cidao[l])<=(cidao[r]-now))//选择与当前磁道最近的请求给予服务{cout<sum+=now-cidao[l];now=cidao[l];l=l-1;}else{cout<sum+=cidao[r]-now;now=cidao[r];r=r+1;}}if(l==-1)//磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道{for(j=r;j{cout<}sum+=cidao[m-1]-cidao[0];}else//磁头移动到序列的最大号,返回内侧扫描仍未扫描的磁道{for(j=l;j>=0;j--){cout<}sum+=cidao[m-1]-cidao[0];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/*****************************扫描调度算法*******************************/voidSCAN(intcidao[],intm)//先要给出当前磁道号和移动臂的移动方向{intk=1;intnow,l,r,d;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";D:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoD;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
sum=cidao[m-1]-now;
if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;while((l>=0)&&(r{if((now-cidao[l])<=(cidao[r]-now))//选择与当前磁道最近的请求给予服务{cout<sum+=now-cidao[l];now=cidao[l];l=l-1;}else{cout<sum+=cidao[r]-now;now=cidao[r];r=r+1;}}if(l==-1)//磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道{for(j=r;j{cout<}sum+=cidao[m-1]-cidao[0];}else//磁头移动到序列的最大号,返回内侧扫描仍未扫描的磁道{for(j=l;j>=0;j--){cout<}sum+=cidao[m-1]-cidao[0];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/*****************************扫描调度算法*******************************/voidSCAN(intcidao[],intm)//先要给出当前磁道号和移动臂的移动方向{intk=1;intnow,l,r,d;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";D:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoD;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
while(cidao[k]{k++;}l=k-1;r=k;while((l>=0)&&(r{if((now-cidao[l])<=(cidao[r]-now))//选择与当前磁道最近的请求给予服务{cout<sum+=now-cidao[l];now=cidao[l];l=l-1;}else{cout<sum+=cidao[r]-now;now=cidao[r];r=r+1;}}if(l==-1)//磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道{for(j=r;j{cout<}sum+=cidao[m-1]-cidao[0];}else//磁头移动到序列的最大号,返回内侧扫描仍未扫描的磁道{for(j=l;j>=0;j--){cout<}sum+=cidao[m-1]-cidao[0];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/*****************************扫描调度算法*******************************/voidSCAN(intcidao[],intm)//先要给出当前磁道号和移动臂的移动方向{intk=1;intnow,l,r,d;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";D:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoD;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
k++;
l=k-1;
r=k;
while((l>=0)&&(r{if((now-cidao[l])<=(cidao[r]-now))//选择与当前磁道最近的请求给予服务{cout<sum+=now-cidao[l];now=cidao[l];l=l-1;}else{cout<sum+=cidao[r]-now;now=cidao[r];r=r+1;}}if(l==-1)//磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道{for(j=r;j{cout<}sum+=cidao[m-1]-cidao[0];}else//磁头移动到序列的最大号,返回内侧扫描仍未扫描的磁道{for(j=l;j>=0;j--){cout<}sum+=cidao[m-1]-cidao[0];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/*****************************扫描调度算法*******************************/voidSCAN(intcidao[],intm)//先要给出当前磁道号和移动臂的移动方向{intk=1;intnow,l,r,d;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";D:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoD;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
if((now-cidao[l])<=(cidao[r]-now))//选择与当前磁道最近的请求给予服务
cout<sum+=now-cidao[l];now=cidao[l];l=l-1;}else{cout<sum+=cidao[r]-now;now=cidao[r];r=r+1;}}if(l==-1)//磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道{for(j=r;j{cout<}sum+=cidao[m-1]-cidao[0];}else//磁头移动到序列的最大号,返回内侧扫描仍未扫描的磁道{for(j=l;j>=0;j--){cout<}sum+=cidao[m-1]-cidao[0];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/*****************************扫描调度算法*******************************/voidSCAN(intcidao[],intm)//先要给出当前磁道号和移动臂的移动方向{intk=1;intnow,l,r,d;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";D:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoD;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
sum+=now-cidao[l];
now=cidao[l];
l=l-1;
cout<sum+=cidao[r]-now;now=cidao[r];r=r+1;}}if(l==-1)//磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道{for(j=r;j{cout<}sum+=cidao[m-1]-cidao[0];}else//磁头移动到序列的最大号,返回内侧扫描仍未扫描的磁道{for(j=l;j>=0;j--){cout<}sum+=cidao[m-1]-cidao[0];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/*****************************扫描调度算法*******************************/voidSCAN(intcidao[],intm)//先要给出当前磁道号和移动臂的移动方向{intk=1;intnow,l,r,d;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";D:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoD;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
sum+=cidao[r]-now;
now=cidao[r];
r=r+1;
if(l==-1)//磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道
for(j=r;j{cout<}sum+=cidao[m-1]-cidao[0];}else//磁头移动到序列的最大号,返回内侧扫描仍未扫描的磁道{for(j=l;j>=0;j--){cout<}sum+=cidao[m-1]-cidao[0];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/*****************************扫描调度算法*******************************/voidSCAN(intcidao[],intm)//先要给出当前磁道号和移动臂的移动方向{intk=1;intnow,l,r,d;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";D:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoD;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<}sum+=cidao[m-1]-cidao[0];}else//磁头移动到序列的最大号,返回内侧扫描仍未扫描的磁道{for(j=l;j>=0;j--){cout<}sum+=cidao[m-1]-cidao[0];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/*****************************扫描调度算法*******************************/voidSCAN(intcidao[],intm)//先要给出当前磁道号和移动臂的移动方向{intk=1;intnow,l,r,d;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";D:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoD;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
sum+=cidao[m-1]-cidao[0];
else//磁头移动到序列的最大号,返回内侧扫描仍未扫描的磁道
for(j=l;j>=0;j--)
cout<}sum+=cidao[m-1]-cidao[0];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/*****************************扫描调度算法*******************************/voidSCAN(intcidao[],intm)//先要给出当前磁道号和移动臂的移动方向{intk=1;intnow,l,r,d;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";D:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoD;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<cout<<"平均寻道长度:"<}/*****************************扫描调度算法*******************************/voidSCAN(intcidao[],intm)//先要给出当前磁道号和移动臂的移动方向{intk=1;intnow,l,r,d;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";D:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoD;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
"<}/*****************************扫描调度算法*******************************/voidSCAN(intcidao[],intm)//先要给出当前磁道号和移动臂的移动方向{intk=1;intnow,l,r,d;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";D:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoD;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
/*****************************扫描调度算法*******************************/
voidSCAN(intcidao[],intm)//先要给出当前磁道号和移动臂的移动方向
intnow,l,r,d;
D:
"<gotoD;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
gotoD;
if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先
cout<sum=now-cidao[0];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先
for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
if(now>cidao[0]&&now{while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
while(cidao[k]{k++;}l=k-1;r=k;cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):";cin>>d;if(d==0)//选择移动臂方向向内,则先向内扫描{cout<<"磁盘扫描序列为:";for(j=l;j>=0;j--){cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<<"请输入当前移动臂的移动的方向(1表示向外,0表示向内):
cin>>d;
if(d==0)//选择移动臂方向向内,则先向内扫描
cout<}for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
for(j=r;j{cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<}sum=now-2*cidao[0]+cidao[m-1];}else//选择移动臂方向向外,则先向外扫描{cout<<"磁盘扫描序列为:";for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
sum=now-2*cidao[0]+cidao[m-1];
else//选择移动臂方向向外,则先向外扫描
for(j=r;j{cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<}for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道{cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道
cout<}sum=-now-cidao[0]+2*cidao[m-1];}}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
sum=-now-cidao[0]+2*cidao[m-1];
cout<cout<<"平均寻道长度:"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
"<}/************************循环扫描调度算法*****************************/voidCSCAN(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;inta;charstr[100];floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序cout<<"请输入当前的磁道号:";E:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
/************************循环扫描调度算法*****************************/
voidCSCAN(intcidao[],intm)
E:
"<gotoE;}elsenow=trans(str,a);//输入当前磁道号if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
gotoE;
if(cidao[m-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务
for(i=0;icout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<sum=now-2*cidao[0]+cidao[m-1];}if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先{cout<<"磁盘扫描序列为:";for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
for(i=0;icout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<sum=cidao[m-1]-now;}if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
if(now>cidao[0]&&now{cout<<"磁盘扫描序列为:";while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
while(cidao[k]{k++;}l=k-1;r=k;for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
for(j=r;j{cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<}for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
for(j=0;j{cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<}sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];}ave=(float)(sum)/(float)(m);cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0];
cout<cout<<"平均寻道长度:"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
"<}voidmain(){inta;intc;//菜单项intcidao[maxsize];inti=0,count;charstr[100];cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
voidmain()
intc;//菜单项
intcidao[maxsize];
inti=0,count;
cout<<"*****************************磁盘调度算法与实现************************"<cout<<"\n请输入磁道序列(0结束):"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<<"\n请输入磁道序列(0结束):
"<A:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
A:
"<gotoA;//输入错误,跳转到A,重新输入}elsecidao[i]=trans(str,a);i++;while(cidao[i-1]!=0){cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0)cout<<"输入数据的类型错误,请重新输入!"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
gotoA;//输入错误,跳转到A,重新输入
cidao[i]=trans(str,a);
while(cidao[i-1]!
=0)
"<else{cidao[i]=trans(str,a);i++;}}count=i-1;//要访问的磁道数cout<<"你输入的磁道序列为:";for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
count=i-1;//要访问的磁道数
cout<<"你输入的磁道序列为:
for(i=0;i{cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<}cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<while(1){cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
while
(1)
cout<cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<<"**********************************************"<cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<<"******系统菜单******"<cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<<"**********************************************"<cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<<"******"<cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<<"**1.先来先服务**"<cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<<"****"<cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<<"**2.最短寻道时间优先**"<cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<<"****"<cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<<"**3.扫描调度**"<cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<<"****"<cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<<"**4.循环扫描**"<cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<<"****"<cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<<"**5.退出**"<cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<<"******"<cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<<"**********************************************"<cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
cout<<"**********************************************"<G:cout<<"请选择算法:";F:cin>>str;//对输入数据进行有效性判断a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入!"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
G:
cout<<"请选择算法:
F:
"<gotoF;//输入错误,跳转到F,重新输入}elsec=trans(str,a);if(c==5)break;if(c>5){cout<<"数据输入错误!请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
gotoF;//输入错误,跳转到F,重新输入
c=trans(str,a);
if(c==5)
if(c>5)
cout<<"数据输入错误!
请重新输入"<gotoG;}switch(c){case1://使用FCFS算法FCFS(cidao,count);break;case2://使用SSTF算法SSTF(cidao,count);break;case3://使用SCAN算法SCAN(cidao,count);break;case4://使用CSCAN算法CSCAN(cidao,count);break;}}}
gotoG;
switch(c)
case1:
//使用FCFS算法
FCFS(cidao,count);
case2:
//使用SSTF算法
SSTF(cidao,count);
case3:
//使用SCAN算法
SCAN(cidao,count);
case4:
//使用CSCAN算法
CSCAN(cidao,count);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1