#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);
}