📄 main.cpp
字号:
}
void scanl()//下面是单向先往小方向的算法;
{
int shift=0;
if(track.current>=*(currents1+track.tracknum-1))//判断磁头最初所在的磁道号是否大于所申请访盘的最大的磁道号还大;
{ shift=track.current-*(currents1+0);//磁头最初所在的磁道号与最小的磁道号的差就是磁头最终要移动的距离;
for(j=1,i=track.tracknum-1;j<=track.tracknum,i>=0;j++,i--)
*(currents2+j)=*(currents1+i);//把currents1的内容从大到小赋给currents2;
}
else
{if(track.current<=*(currents1+0))//判断磁头最初所在的位置是否小于所申请访盘的磁道号最小的;
{shift=*(currents1+(track.tracknum-1))-track.current;//最大的磁道号与磁头最初所在的磁道号差就磁头最终移动的总路程;
for(j=1,i=0;j<=track.tracknum,i<track.tracknum;j++,i++)
*(currents2+j)=*(currents1+i);} //把currents1中的内容从小到大赋给currents2;
else
for(i=1;i<track.tracknum;i++)
if((track.current)>=*(currents1+i)&&(track.current)<=*(currents1+i+1))//找到磁头在currents1中的位置;
{
for(j=1,k=i;k>=0,j<=track.tracknum;j++,k--)
*(currents2+j)= *(currents1+k);//把currents1该位置i往低方向的内容赋给currents2;
for(j=i+2,m=i+1;m<track.tracknum,j<=track.tracknum;m++,j++)
{ *(currents2+j)= *(currents1+m);}//把currents1该位置i+1往高方向的内容赋给currents2
a=track.current-*(currents1+0);//把最初磁头所在的磁道号与最小的磁道号的差赋给a;
b=*(currents1+(track.tracknum-1))-*(currents1+0);//把最大的磁道号与最小的磁道的差差赋给b;
shift=a+b;//路程就是a,b两都之和;
break;//找到最初磁头所在的位置就退出,否则继续找;
}
else
continue;
}
printf("\n");
printf("the SCANL liner is:\n");
for(j=0;j<track.tracknum+1;j++)
printf("%d ",*(currents2+j));//输出磁头最终的扫描路线;
printf("\n");
printf("shift=%d",shift);//输出磁头所扫描的路程;
}
void scanh()//下面是单向先向高方向的扫描算法;
{ int shift=0;
if(track.current>=*(currents1+(track.tracknum-1)))//判断磁头最初所在的磁道号是否大于所申请访盘的最大的磁道号还大;
{ shift=track.current-*(currents1+0);//磁头最初所在的磁道号与最小的磁道号的差就是磁头最终要移动的距离;
for(j=1,i=track.tracknum-1;j<=track.tracknum,i>=0;j++,i--)
*(currents2+j)=*(currents1+i);//把currents1的内容从大到小赋给currents2;
}
else
{if(track.current<=*(currents1+0))//判断磁头最初所在的位置是否小于所申请访盘的磁道号最小的;
{shift=*(currents1+(track.tracknum-1))-track.current;//最大的磁道号与磁头最初所在的磁道号之前就是磁头最终所走过的路程;
for(j=1,i=0;j<=track.tracknum,i<track.tracknum;j++,i++)
*(currents2+j)=*(currents1+i);} //把currents1的内容从小到大赋给currents2
else
for(i=1;i<track.tracknum;i++)//下面是找最初磁头在currents1中的位置i;
if((track.current)>=*(currents1+i)&&(track.current)<=*(currents1+i+1))
{
for(j=1,k=i+1;k<track.tracknum,j<=track.tracknum;j++,k++)
*(currents2+j)=*(currents1+k);//找到该位置i后,把currents1中从i+1到track.tracknum-1中的内容赋给currents2;
for(j=track.tracknum-i,m=i;m>=0;m--,j++)
{ *(currents2+j)=*(currents1+m);}//把currents1中从0到i中的内容赋给currents2;
a=abs(track.current-*(currents1+(track.tracknum-1)));//把最初磁头所在的磁道号与最大的磁道号的差的绝对值赋给a;
b=*(currents1+track.tracknum-1)-*(currents1+0);//把最大的磁道号与最小的磁道的差差赋给b
shift=a+b;//路程就是a,b两都之和;
break;//找到最初磁头所在的位置就退出,否则继续找;
}
else continue;
}
printf("\n");
printf("the SCANH liner is:\n");
for(j=0;j<track.tracknum+1;j++)
printf("%d ",*(currents2+j));//输出磁头最终的扫描路线;
printf("\n");
printf("shift=%d",shift);//输出磁头所扫描的路程;
}
void cscanl()//下面是循环扫描先往低方向的算法;
{ int shift=0;
if(track.current<=*(currents1+0))//判断磁头最初所在的位置是否小于所申请访盘的磁道号最小的;
{
shift=(*(currents1+(track.tracknum-1))-track.current)+(*(currents1+(track.tracknum-1))-*(currents1+0));//最大的磁道号和最初磁头所在的磁道之差加上最大的与最小之差的和就是总距离;
for(i=track.tracknum-1,j=1;i>=0,j<=track.tracknum;i--,j++)
*(currents2+j)=*(currents1+i);}//把currents1的内容从大到小赋给currents2;
else
{
if(track.current>=*(currents1+(track.tracknum-1)))//判断磁头最初所在的磁道号是否大于所申请访盘的最大的磁道号还大;
{shift=track.current-*(currents1+0);//磁头最初所在的磁道号与最小的磁道号的差就是磁头最终要移动的距离;
for(i=track.tracknum-1,j=1;i>=0,j<=track.tracknum;i--,j++)
*(currents2+j)=*(currents1+i);}//把currents1的内容从大到小赋给currents2;
else
for(i=0;i<track.tracknum;i++)//下面是找最初磁头在currents1中的位置i;
if((track.current)>=*(currents1+i)&&(track.current)<=*(currents1+i+1))
{ a=abs(*(currents1+(track.tracknum-1))-*(currents1+0));//把最大的磁道号与最小的磁道的差差赋给a;
b=abs(track.current-*(currents1+i+1));//把磁头最初所在的磁道号与currents1中第i+1的内容的差赋给b;
shift=abs(2*a-b);//两倍的a和b的差就是磁头的移动的总距离;
for(j=1,k=i;k>=0,j<=track.tracknum;j++,k--)
*(currents2+j)= *(currents1+k);//找到该位置i后,把currents1中从i到0中的内容赋给currents2;
for(m=track.tracknum-1,j=i+2;m>=i+1,j<=track.tracknum;m--,j++)
*(currents2+j)= *(currents1+m);//接着把currents1中从track.tracknum-1到i+1中的内容赋给currents2;
break;//找到最初磁头所在的位置就退出,否则继续找;
}
else continue;
}
printf("\n");
printf("the CSCANL liner is:\n");
for(j=0;j<track.tracknum+1;j++)
printf("%d ",*(currents2+j));//输出磁头最终的扫描路线;
printf("\n");
printf("shift=%d",shift);//输出磁头所扫描的路程;
}
void cscanh()//下面是循环先向高方向的算法;
{ int shift=0;
if(track.current<=*(currents1+0))//判断磁头最初所在的位置是否小于所申请访盘的磁道号最小的;
{shift=*(currents1+(track.tracknum-1))-track.current;//最大的磁道号与磁头最初所在的磁道号差就磁头最终移动的总路程;
for(i=0,j=1;i<track.tracknum,j<=track.tracknum;i++,j++)
*(currents2+j)=*(currents1+i);}//把currents1的内容从小到大赋给currents2;
else
{
if(track.current>=*(currents1+(track.tracknum-1)))//判断磁头最初所在的磁道号是否大于所申请访盘的最大的磁道号还大;
{shift=track.current-*(currents1+0);//磁头最初所在的磁道号与最小的磁道号的差就是磁头最终要移动的距离;
for(i=track.tracknum-1,j=1;i>=0,j<=track.tracknum;i--,j++)
*(currents2+j)=*(currents1+i);}//把currents1的内容从大到小赋给currents2;
else
for(i=0;i<track.tracknum;i++)//下面是找最初磁头在currents1中的位置i;
if((track.current)>=*(currents1+i)&&(track.current)<=*(currents1+i+1))
{ a=abs(*(currents1+(track.tracknum-1))-*(currents1+0));//把最大的磁道号与最小的磁道的差差赋给a;
b=abs(track.current-*(currents1+i));//把磁头最初所在的磁道号与currents1中第i的内容的差赋给b;
shift=abs(2*a-b);//两倍的a和b的差就是磁头的移动的总距离;
for(j=1,k=i+1;k<track.tracknum;j++,k++)
*(currents2+j)= *(currents1+k);//找到该位置i后,把currents1中从i+1到track.tracknum-1中的内容赋给currents2;
for(j=track.tracknum-i,m=0;m<=i;m++,j++)
*(currents2+j)= *(currents1+m);//接着把currents1中从0到i中的内容赋给currents2;
break;//找到最初磁头所在的位置就退出,否则继续找;
}
else continue;
}
printf("\n");
printf("the CSCANH liner is:\n");
for(j=0;j<track.tracknum+1;j++)
printf("%d ",*(currents2+j));//输出磁头最终的扫描路线;
printf("\n");
printf("shift=%d",shift);//输出磁头所扫描的路程;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -