#include<iostream.h>
#include<stdio.h>
#include<math.h>
int c=100;
long int sum=0;//记录寻道总长度
int amount=0;//磁道号个数
int x;
float average=0;
int *a=new int[1000];//记录磁道号数组
int direct=0;//SCAN算法寻道方向设定,1为向磁道号增大的方向,-1为向磁道号减少的方向
void main()
{
int chouse;
int i;
void disksstf();//SSTF算法
void diskscan();//SCAN算法
while(chouse!=3)
{
cout<<"要进入SSTF算法,请按1!"<<endl;
cout<<"要进入SCAN算法,请按2!"<<endl;
cout<<"退出,请按3!"<<endl;
cin>>chouse;
switch(chouse){
case 1: c=100;sum=0;cout<<"请输入要输入的数据的个数:"<<endl;
cin>>amount;
cout<<"请输入数据,以空格隔开,回车结束:"<<endl;
for(i=0;i<amount;i++)
{
cin>>x;
a[i]=x;
}
disksstf();break;
case 2:c=100;sum=0;direct=0;cout<<"设置磁道号增加方向,输入-1表示向减少方向移动,输入1表示向增大方向移动;"<<endl;
cin>>direct;
cout<<"请输入要输入的数据的个数:"<<endl;
cin>>amount;
cout<<"请输入数据,以空格隔开,回车结束:"<<endl;
for(i=0;i<amount;i++)
{
cin>>x;
a[i]=x;
}
diskscan();break;
case 3:cout<<"结束使用,再见!"<<endl<<endl;break;
default: cout<<"输入错误,请重新输入!"<<endl<<endl;break;
}
}
}
void disksstf()//SSTF算法定义
{
int k=0;
int t=0;
for(int j=0;j<amount;j++)
{
for(int i=0,min=32767;i<amount;i++)
{
if(a[i]==-1) continue;
else
{
t=abs(a[i]-c);
if(t<min)
{
min=t;k=i;
}
}
}
c=a[k];
a[k]=-1;
sum=sum+min;
}
average=(float)sum/amount;
cout<<"平均寻道长度为:"<<average<<endl<<endl;
}
void diskscan()//SCAN算法定义
{
int Min=32767;
int max=-32768;
int k=0;
int t=0;
int touch=0;
for(int i=0;i<amount;i++)
{
if(a[i]>max) max=a[i];
}
for(int j=0;j<amount;j++)
{
if(a[j]<Min) Min=a[j];
}
if(direct==1)
{
for(int j=0;j<amount;j++)
{
if(c==max) touch=1;
for(int i=0,min=32767;i<amount;i++)
{
if(touch==1)
{
if(a[i]==-1) continue;
else
{
t=abs(a[i]-c);
if(t<min)
{
min=t;k=i;
}
}
}
if(touch!=1)
{
if(a[i]==-1 || a[i]<c) continue;
else
{
t=abs(a[i]-c);
if(t<min)
{
min=t;k=i;
}
}
}
}
c=a[k];
a[k]=-1;
sum=sum+min;
}
average=(float)sum/amount;
cout<<"平均寻道长度为:"<<average<<endl<<endl;
}
if(direct==-1)
{
for(int j=0;j<amount;j++)
{
if(c==Min) touch=1;
for(int i=0,min=32767;i<amount;i++)
{
if(touch==1)
{
if(a[i]==-1) continue;
else
{
t=abs(a[i]-c);
if(t<min)
{
min=t;k=i;
}
}
}
if(touch!=1)
{
if(a[i]==-1 || a[i]>c) continue;
else
{
t=abs(a[i]-c);
if(t<min)
{
min=t;k=i;
}
}
}
}
c=a[k];
a[k]=-1;
sum=sum+min;
}
average=(float)sum/amount;
cout<<average<<endl<<endl;
}
}
c08081144
- 粉丝: 0
- 资源: 13