C++

 

#include <iostream>
#include<iomanip>
using namespace std;
const int MaxNumber=100;
 int  TrackOrder[MaxNumber];
 int  MoveDistance[MaxNumber];
 int FCF[MaxNumber];
 int SST[MaxNumber];
 int a[MaxNumber];
 int b[MaxNumber];
 int pass[MaxNumber];
 double  AverageDistance;
 bool direction;
 int n,m,i,j,k,x,y,z,key;

 void input(){
  cout<<"========================"<<endl;
  cout<<"======磁盘调度算法======"<<endl;
  cout<<"========================"<<endl;
  cout<<"输入开始磁盘号:";
  cin>>m;
  cout<<"输入磁道个数:";
  cin>>n;
  cout<<"输入磁道访问序列"<<endl;
  for(i=0;i<n;i++){
   cin>>TrackOrder[i];
  }

 }
 void FCFS(){
  cout<<"========================="<<endl;
  cout<<"=========1-FCFS=========="<<endl;
  for(i=0;i<n;i++){
   FCF[i]=TrackOrder[i];
   MoveDistance[i]=0;
  }
  y=m;
  for(i=0;i<n;i++){
   if(y>=FCF[i])
     MoveDistance[i]=y-FCF[i];
   else if(y<FCF[i])
    MoveDistance[i]=FCF[i]-y;
         y=FCF[i]; 
  }
  cout<<"从 "<<m<<" 号磁道开始;"<<endl;
  cout<<"被访问的下一个磁道号(->)"<<endl;
  for(i=0;i<n;i++){
   cout<<setw(5)<<FCF[i]<<"   ";
  }
  x=0;
  cout<<"移动距离(磁道数->)"<<endl;
  for(i=0;i<n;i++){
   x+=MoveDistance[i];
   cout<<setw(5)<<MoveDistance[i]<<"   ";
  }
  cout<<endl;
  cout<<"平均寻道长度:"<<(double)x/(double)n;
  cout<<endl;

 

 }
 void SSTF(){
   cout<<"========================="<<endl;
   cout<<"==========2-SSTF========="<<endl;
  for(i=0;i<n;i++){
   FCF[i]=TrackOrder[i];
   MoveDistance[i]=0;
   pass[i]=0;
  }
  y=m;
  for(i=0;i<n;i++){
   for(j=i;j<n;j++){
    if(y>=FCF[j])
     pass[j]=y-FCF[j];
    else if(y<FCF[j])
     pass[j]=FCF[j]-y;
   }
  
   x=0;
   for(j=i;j<n;j++)
   {
    if(pass[i]>pass[j])
    {   x++;
     pass[i]=pass[j];
     k=j;
     
    }
    
   }
   
   if(x!=0){
   y=FCF[k];
   z=FCF[i];
   FCF[i]=FCF[k];
   FCF[k]=z;
   if(x==0){
    FCF[i]=FCF[k];
    y=FCF[k];
   }
  }

  }
  y=m;
  for(i=0;i<n;i++){
   if(y>=FCF[i])
     MoveDistance[i]=y-FCF[i];
   else if(y<FCF[i])
    MoveDistance[i]=FCF[i]-y;
         y=FCF[i]; 
  }
  cout<<endl;
  cout<<"从 "<<m<<" 号磁道开始;"<<endl;
  cout<<"被访问的下一个磁道号(->)"<<endl;
  for(i=0;i<n;i++){
   cout<<setw(5)<<FCF[i]<<"   ";
  }
  x=0;
  cout<<"移动距离(磁道数->)"<<endl;
  for(i=0;i<n;i++){
   x+=MoveDistance[i];
   cout<<setw(5)<<MoveDistance[i]<<"   ";
  }
  cout<<endl;
  cout<<"平均寻道长度:"<<(double)x/(double)n;
  cout<<endl;

 


 }
 void SCAN(){
  cout<<"========================="<<endl;
  cout<<"==========3-SCAN========="<<endl;
  for(i=0;i<n;i++){
   FCF[i]=TrackOrder[i];
   MoveDistance[i]=0;
   pass[i]=FCF[i];
  }
  y=m;
  x=0;
  k=0;
  for(i=0;i<n;i++)
  {
  
      if(y<pass[i])
    {a[x]=pass[i];
     x++;
    }
    if(y>pass[i]){
     b[k]=pass[i];
      k++;
    }
  }
  for(i=0;i<x;i++)
   for(j=i;j<x;j++){
    if(a[i]>a[j])
    {
     z=a[i];
     a[i]=a[j];
     a[j]=z;
    }
   }
  for(i=0;i<k;i++)
   for(j=i;j<k;j++){
    if(b[i]<b[j])
    {
     z=b[i];
     b[i]=b[j];
     b[j]=z;
    }
   }
  
   for(i=0;i<x;i++){
    FCF[i]=a[i];
   }
   for(j=0;j<k;j++)
   {
    FCF[j+x]=b[j];
   }

    y=m;
  for(i=0;i<n;i++){
   if(y>=FCF[i])
     MoveDistance[i]=y-FCF[i];
   else if(y<FCF[i])
    MoveDistance[i]=FCF[i]-y;
         y=FCF[i]; 
  }
  cout<<endl;
  cout<<"从 "<<m<<" 号磁道开始;"<<endl;
  cout<<"被访问的下一个磁道号(->)"<<endl;
  for(i=0;i<n;i++){
   cout<<setw(5)<<FCF[i]<<"   ";
  }
  x=0;
  cout<<"移动距离(磁道数->)"<<endl;
  for(i=0;i<n;i++){
   x+=MoveDistance[i];
   cout<<setw(5)<<MoveDistance[i]<<"   ";
  }
  cout<<endl;
  cout<<"平均寻道长度:"<<(double)x/(double)n;
  cout<<endl;
  
      
 }

 void CSCAN(){
   cout<<"========================="<<endl;
  cout<<"==========3-SCAN========="<<endl;
  for(i=0;i<n;i++){
   FCF[i]=TrackOrder[i];
   MoveDistance[i]=0;
   pass[i]=FCF[i];
  }
  y=m;
  x=0;
  k=0;
  for(i=0;i<n;i++)
  {
  
      if(y<pass[i])
    {a[x]=pass[i];
     x++;
    }
    if(y>pass[i]){
     b[k]=pass[i];
      k++;
    }
  }
  for(i=0;i<x;i++)
   for(j=i;j<x;j++){
    if(a[i]>a[j])
    {
     z=a[i];
     a[i]=a[j];
     a[j]=z;
    }
   }
  for(i=0;i<k;i++)
   for(j=i;j<k;j++){
    if(b[i]>b[j])
    {
     z=b[i];
     b[i]=b[j];
     b[j]=z;
    }
   }
  
   for(i=0;i<x;i++){
    FCF[i]=a[i];
   }
   for(j=0;j<k;j++)
   {
    FCF[j+x]=b[j];
   }

    y=m;
  for(i=0;i<n;i++){
   if(y>=FCF[i])
     MoveDistance[i]=y-FCF[i];
   else if(y<FCF[i])
    MoveDistance[i]=FCF[i]-y;
         y=FCF[i]; 
  }
  cout<<endl;
  cout<<"从 "<<m<<" 号磁道开始;"<<endl;
  cout<<"被访问的下一个磁道号(->)"<<endl;
  for(i=0;i<n;i++){
   cout<<setw(5)<<FCF[i]<<"   ";
  }
  x=0;
  cout<<"移动距离(磁道数->)"<<endl;
  for(i=0;i<n;i++){
   x+=MoveDistance[i];
   cout<<setw(5)<<MoveDistance[i]<<"   ";
  }
  cout<<endl;
  cout<<"平均寻道长度:"<<(double)x/(double)n;
  cout<<endl;
  
 }
 void main(){
  input();
  FCFS();
  SSTF();
  SCAN();
  CSCAN();

 }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值