操作系統實習設計5

#include
#include<stdlib.h>
#include <math.h>
#include<time.h>
void sstf(int m[]);
void scan(int b[]);
void sort(int a[],int);
int *Init(int arr[])  
{  
    int i = 0;  
     
    srand((unsigned int)time(0));  
    for (i = 0; i < 8; i++)  
    {  
        arr[i] = rand() % 200 + 1;  
        printf("%d ", arr[i]);  
    }  
    printf("\n");  
    return arr;  
}
int main()
{    int x;
     printf("模擬磁盤移臂調度程序\n");
     printf("***********************************************\n");
     printf("***********************************************\n");
int arr[8] = { 0 };  
     int *ret=Init(arr);
printf("1.選擇掃描算法          2.選擇最短尋到時間算法\n");
scanf("%d",&x);
switch(x){
case 1: scan(arr); break;
     case 2: sstf(arr); break;
default :break;
}


     return 0;
}


 void scan(int d[]){//掃描算法
      int x,y,sum=0;
 int dnow=100;
      printf("掃描服務順序:");
      sort(d,8);
      for(x = 0; x < 8; x++){
           if(d[x] > dnow){
               y = x;
               break;
           }
     }
     for(x = y; x < 8; x++){
           printf("%d ",d[x]);
           sum = sum + fabs(dnow-d[x]);
      }
      for(x = y-1;x>=0;x--){
           printf("%d ",d[x]);
           sum = sum + fabs(dnow-d[x]);
      }
      printf("\nSCAN道數和爲:%d\n",sum);
 printf("SCAN平均尋道長度:%lf\n",(double)sum/8);
 }
 void sort(int a[],int n){
    int i,j,tmp;
    for(i=0;i<n-1;i++){
        for(j=0;j<n-i-1;j++){
            if(a[j]>a[j+1]){
                tmp=a[j+1];
                a[j+1]=a[j];
                a[j]=tmp;                //做數據交換位置處理
         }
     }
   }
}
void sstf(int m[]){//最短尋道時間優先
     int n,k,tmp,x,sum=0;
int mnow=100;
     printf("最短尋道時間優先服務順序:");
     for(n=0;n<8;n++){
          tmp = fabs(m[0]-mnow);
          x = 0;
          for(k=1;k<8-n;k++){
               if(fabs(m[k]-mnow)<tmp){
                    x = k;
                    tmp = fabs(m[k]-mnow);
               }
          }
          printf("%d ",m[x]);
               sum =sum +tmp;
               mnow = m[x];
               for(k=0;k<8-x-n;k++){
                    m[x+k]=m[x+k+1];
               }
     }
     printf("\nSSTF道數和爲:%d\n",sum);
printf("SSTF平均尋道長度:%lf\n",(double)sum/8);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章