// 磁盘调度算法.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include
using namespace std;
#include
const int MaxNumber=100;
int TrackOrder[MaxNumber];//磁道访问序列
int MoveDistance[MaxNumber];//移动的磁道数
double AverageDistance;//平均寻道长度
bool direction;//移动方向;若为1时是想磁道号增加的方向访问,否者,反方向访问。
int visit[MaxNumber];
int n;//磁道个数
int m;//开始磁道号
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 初始化 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
void initial(){
//cout<
cin>>n;
//cout<
cin>>m;
//cout<
for(int i=0;i>TrackOrder[i++]);
for(int i=0;i
cout<
}
void display(){
int i=0;
for(int i=0;i
cout<
}
void average_dis(){
int sum=0;
for(int i=0;i
AverageDistance=(sum*1.0)/n;
}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ FCFS @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
void FCFS(){
int i=0;
int now=m;
for(i=0;i
{MoveDistance[i]=(int)fabs(double(now-TrackOrder[i]));now=TrackOrder[i];}
average_dis();
}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ SSTF @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
void SSTF(){
int now=m;//当前磁道序号
memset(visit,0,MaxNumber*sizeof(int));
int loop_time=n;
int index=0;
int distance=now-TrackOrder[index];
int i=0;
while(loop_time--)
{
for(i=0;i
if(!visit[i])
{index=i;distance=(int)fabs(double(now-TrackOrder[i]));break;}
for(i=0;i
if(!visit[i])
if((int)fabs(double(now-TrackOrder[i]))
{index=i;distance=(int)fabs(double(now-TrackOrder[i]));}
MoveDistance[index]=(int)fabs(double(now-TrackOrder[index]));
now=TrackOrder[index];
visit[index]=true;
}
average_dis();
}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ SCAN @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
void SCAN(){
int now=m;//当前磁道序号
memset(visit,0,MaxNumber*sizeof(int));
int index=0;int distance=0;
int i=0,j=0;
bool jmp=false;
//先由里向外;
while(1)
{
jmp=true;
for(j=0;j
{
if(!visit[j] && TrackOrder[j]>m )
{
jmp=false;
index=j;
distance=TrackOrder[index];
for(i=0;i
if(!visit[i] && TrackOrder[i]>m)
if(TrackOrder[i]
{index=i;distance=TrackOrder[i];}
MoveDistance[index]=(int)fabs(double(now-TrackOrder[index]));
now=TrackOrder[index];
visit[index]=true;
}
}
if(jmp)break;
}
//再由外到里;
while(1)
{
jmp=true;
for(j=0;j
{
if(!visit[j] && TrackOrder[j]
{
jmp=false;
index=j;
distance=TrackOrder[index];
for(i=0;i
if(!visit[i] && TrackOrder[i]
if(TrackOrder[i]>distance)
{index=i;distance=TrackOrder[i];}
MoveDistance[index]=(int)fabs(double(now-TrackOrder[index]));
now=TrackOrder[index];
visit[index]=true;
}
}
if(jmp)break;
}
average_dis();
}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 循环SCAN @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
void loop_SCAN(){
fclose(stdin);
freopen("CON","r",stdin);
cout<
direction=1;
cin>>direction;
int now=m;//当前磁道序号
memset(visit,0,MaxNumber*sizeof(int));
int index=0;int distance=0;
int i=0,j=0;
bool jmp=false;
if(direction==1){
//始终想增加方向
while(1)
{
jmp=true;
for(j=0;j
{
if(!visit[j] && TrackOrder[j]>m )
{
jmp=false;
index=j;
distance=TrackOrder[index];
for(i=0;i
if(!visit[i] && TrackOrder[i]>m)
if(TrackOrder[i]
{index=i;distance=TrackOrder[i];}
MoveDistance[index]=(int)fabs(double(now-TrackOrder[index]));
now=TrackOrder[index];
visit[index]=true;
}
}
if(jmp)break;
}
//再由外到里;
while(1)
{
jmp=true;
for(j=0;j
{
if(!visit[j] && TrackOrder[j]
{
jmp=false;
index=j;
distance=TrackOrder[index];
for(i=0;i
if(!visit[i] && TrackOrder[i]
if(TrackOrder[i]
{index=i;distance=TrackOrder[i];}
MoveDistance[index]=(int)fabs(double(now-TrackOrder[index]));
now=TrackOrder[index];
visit[index]=true;
}
}
if(jmp)break;
}
}
else
{
while(1)
{
jmp=true;
for(j=0;j
{
if(!visit[j] && TrackOrder[j]>m )
{
jmp=false;
index=j;
distance=TrackOrder[index];
for(i=0;i
if(!visit[i] && TrackOrder[i]>m)
if(TrackOrder[i]>distance)
{index=i;distance=TrackOrder[i];}
MoveDistance[index]=(int)fabs(double(now-TrackOrder[index]));
now=TrackOrder[index];
visit[index]=true;
}
}
if(jmp)break;
}
//再由外到里;
while(1)
{
jmp=true;
for(j=0;j
{
if(!visit[j] && TrackOrder[j]
{
jmp=false;
index=j;
distance=TrackOrder[index];
for(i=0;i
if(!visit[i] && TrackOrder[i]
if( TrackOrder[i]>distance)
{index=i;distance=TrackOrder[i];}
MoveDistance[index]=(int)fabs(double(now-TrackOrder[index]));
now=TrackOrder[index];
visit[index]=true;
}
}
if(jmp)break;
}
}
average_dis();
}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 主函数 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
int _tmain(int argc, _TCHAR* argv[])
{
freopen("text.txt","rt",stdin);
int choice=0;
initial();
display();
cout<
while(cin>>choice)
{
if(choice==1){cout<
else if(choice==2){cout<
else if(choice==3){cout<
else if(choice==4){cout<
else cout<
}
return 0;
}