磁道~~~

Posted 宋建楠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了磁道~~~相关的知识,希望对你有一定的参考价值。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>


void SSTF (int a[],int n){
 int temp;
 int now;
 int sum=0,i,j,k=0;
 printf("排序后的磁道分布:\n");
 for(i=0;i<n;i++){
  for(j=i+1;j<n;j++){
   if(a[i]>a[j]){
    temp=a[i];
    a[i]=a[j];
    a[j]=temp;
   }//用冒泡排序对磁道号排序
 }
 printf("%d\t",a[i]);
 if(i%10==9){//没输出10个数换行
  printf("\n");
 }
}
printf("\n");
printf("请输入当前磁道号:\n");
scanf("%d",&now);
if(a[0]>=now){
printf("当前访问的磁道%d\n", a[0]);//当前的
for (i = 0; i < n-1; i++){
printf("当前访问的磁道:\t%d\n",a[i+1]);
}
sum = a[n - 1] - now;
printf("移动的总磁道数:%d\n", sum);
}
else if (a[n - 1] <= now){
    printf("当前访问的磁道:%d\n", a[n-1]);
 for (j=n-1; i<n-1;j--){
  printf("当前访问的磁道:\t%d\n",a[j-1]);
 }
     sum = now-a[0];
  printf("移动的总磁道数:%d\n", sum);
}
    else{
  while (a[k] < now){
   k++;
  }
  j = k-1;
  i = 0;
  while ((j>=0)&&(k<n)){
   i++;
   if (now - a[j] >= a[k] - now){
    printf("当前访问的磁道:\t%d\n", a[k]);
    sum += a[k] - now;
    now = a[k];
    k++;
   }
   else{
    printf("当前访问的磁道:\t%d\n",  a[j]);
    sum+=now-a[j];
    now=a[i];
    j--;
   }
  
  }
if (k > n-1){
 for (int t = j; t > 0; t--){
  i++;
  if (t == j){
   printf("当前访问的磁道:\t%d\n",a[j]);
  }
  else{
   printf("当前访问的磁道:\t%d\n", a[t+1]);
  }
 }
 sum += a[n - 1] - a[0];
}

  if(j<0){

   for(int t=k;t<0;t++){
    i++;
    if(t==k){
     printf("当前访问的磁道:\t%d\n",a[k]);
    }
    else{
     printf("当前访问的磁道:\t%d\n",a[t]);
    }
   }
   sum+=a[n-1]-a[0];
  }
 }
 printf("经过的总磁道数为:%d\n", sum);
 printf("移动的平均磁道数:%.2lf\n", 1.0*sum / n);
 printf("请再次输入你想使用的方法:\n");
}//最短寻到时间

void SCAN(int a[],int n){
 int temp;
 int now;
 int sum=0,i,j,k=0;
 printf("排序后的磁道分布:\n");
 for (i = 0; i < n; i++){
    for (j = i + 1; j < n; j++){
      if (a[i]>a[j]){
     temp = a[i];
     a[i] = a[j];
      a[j] = temp;
   }
    }
    printf("%d \t", a[i]);
     if (i % 10 == 9){
   printf("\n");
  }
 }
 printf("\n请输入当前磁道号:\n");
 scanf("%d", &now);
 if (a[0] >= now){
  printf("当前访问的磁道:%d\n", a[0]);
  for (i = 0; i < n - 1; i++){
   printf("当前访问的磁道:\t%d\n", a[i + 1]);
  }
  sum = a[n - 1] - now;
  printf("移动的总磁道数:%d\n", sum);
 }
 else if (a[n - 1] <= now){
  printf("当前访问的磁道:%d\n", a[n - 1]);
   for ( j = n - 1; i<n - 1; j--){
    printf("当前访问的磁道:\t%d\n",  a[j - 1]);
   }
   sum = now - a[0];
   printf("移动的总磁道数:%d\n", sum);
}
else{
 int d,t;
 while(a[k]<now){
  k++;
 }
 j=k-1;
 printf("请输入当前磁头移动的方向(0向内,1向外):\n");
 scanf("%d", &d);
 if (d == 1){
  for ( t = k; t < n; t++){
   printf("当前访问的磁道:\t%d\n",a[t]);
   sum += a[t] - now;
   now = a[t];
  }
  for ( t = j; t >=0; t--){
   printf("当前访问的磁道:\t%d\n",a[t]);
  }
  sum += a[n - 1] - a[0];
 }
   else if (d == 0){
    for ( t = j; t >= 0; t--){
     printf("当前访问的磁道:\t%d\n", a[t]);
     sum += now - a[t];
     now = a[t];
    }
    for ( t = k; t < n; t++){
     printf("当前访问的磁道:\t%d\n",a[t]);
    }
    sum += a[n - 1] - a[0];
   }
   else{
    printf("输入错误,重新回到选择算法界面!\n");
   }
}
printf("经过的总磁道数为:%d\n", sum);
printf("移动的平均磁道数:%.2lf\n", 1.0*sum/n);
printf("请再次输入你想使用的方法:\n");
}

void main(){
 int n;//磁道数
 int control=1;//控制处理的方式
 printf("请输入要处理的磁道数:\n");
 scanf("%d",&n);
  int c[1000];
  printf("随机生成磁道号:\n");
  srand((unsigned)time(NULL));

  for (int i = 0; i < n; i++){
   c[i]=(rand()%100)+1;
   printf("%d \t", c[i]);
    if (i % 10 ==9){
     printf("\n");
    }
  }
printf("\n 数据生成成功!\n");
printf("算法选择\n");
printf("1.最短寻到时间算法\n");
printf("2.扫描算法\n");
printf("0.推出程序\n");
printf("请输入你想使用的方法:\n");
while (control){
 scanf("%d", &control);
 switch (control){
 case 0:
  break;
 case 1:
  SSTF(c,n);
  break;
 case 2:
  SCAN(c,n);
  break;
 default:
  printf("选项错误!重新选择!");
  break;
 }
}
printf("程序退出成功,谢谢使用!");
system("pause");
}

额,感觉还可以!

 

以上是关于磁道~~~的主要内容,如果未能解决你的问题,请参考以下文章

转帖每个磁道上的扇区数一样吗?

我在哪里可以找到磁条(磁道)测试数据?

磁道扇区柱面是啥

写在磁盘上的磁道/磁头/柱面

磁道扇区柱面是啥

磁道扇区柱面是啥