磁道~~~
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");
}
额,感觉还可以!
以上是关于磁道~~~的主要内容,如果未能解决你的问题,请参考以下文章