www.pudn.com > diaodu.rar > diaodu.cpp
#include "stdio.h" #include "stdlib.h" #includevoid CopyL(int Sour[],int Dist[] ,int x); void SetDI(int DiscL[]); void Print(int Pri[],int x); void DelInq(int Sour[],int x,int y); void FCFS(int Han,int DiscL[]); void SSTF(int Han,int DiscL[]); int SCAN(int Han,int DiscL[],int x,int y); void CSCAN(int Han,int DiscL[]); void N_Step_SCAN(int Han1,int DiscL[]); void PaiXu(); void Pri(); int NAll=0; int Best[5][2]; int Limit=0; int Jage; int Aver=0; void main() { int i; int DiscLine[10]; int Hand; int Con; while(Con!=0) { Jage=0; printf("\n+ 请输入初始的磁道数(0 >Hand; printf("\n+ 输入寻找的范围:"); cin>>Limit; if(Limit>65000) break; cout<<" 选择如下算法: "< >n; switch(n) { case 1: SetDI(DiscLine); FCFS(Hand,DiscLine); break; case 2: SetDI(DiscLine); SSTF(Hand,DiscLine); break; case 3: SetDI(DiscLine); SCAN(Hand,DiscLine,0,9); break; case 4: SetDI(DiscLine); CSCAN(Hand,DiscLine); break; case 5: SetDI(DiscLine); N_Step_SCAN(Hand,DiscLine); break; case 6: SetDI(DiscLine); FCFS(Hand,DiscLine); SSTF(Hand,DiscLine); SCAN(Hand,DiscLine,0,9); CSCAN(Hand,DiscLine); N_Step_SCAN(Hand,DiscLine); PaiXu(); printf("\n+ 寻道长度由低到高排序 :"); for(i=0;i<5;i++) { printf("%4d ",Best[i][0]); } break; } printf("\n+ 是否继续(0 or 1)?"); scanf("%5d",&Con); } } void CopyL(int Sour[],int Dist[] ,int x) { int i; for(i=0;i<=x;i++) { Dist[i]=Sour[i]; } } void Print(int Pri[],int x) { int i; for(i=0;i<=x;i++) { printf("%5d",Pri[i]); } } void SetDI(int DiscL[]) { int i; for(i=0;i<=9;i++) { DiscL[i]=rand()%Limit; } printf("+ 需要寻找的磁道号 :"); Print(DiscL,9); } void DelInq(int Sour[],int x,int y) { int i; for(i=x;i ",All); printf("\n+ 平均寻道长度 :*%5d* ",Aver); } void SSTF(int Han,int DiscL[]) { int i,j,k,h,All; int Temp; int RLine[10]; int Min; All=0; k=9; CopyL(DiscL,RLine,9); printf("\n+ 按照SSTF算法磁道的访问顺序为 : "); for(i=0;i<=9;i++) { Min=64000; for(j=0;j<=k;j++) { if(RLine[j]>Han) Temp=RLine[j]-Han; else Temp=Han-RLine[j]; if(Temp ",All); printf("\n+ 平均寻道长度 :*%5d* ",Aver); } int SCAN(int Han,int DiscL[],int x,int y) { int j,n,k,h,m,All; int Temp; int Min; int RLine[10]; int Order; Order=1; k=y; m=2; All=0; CopyL(DiscL,RLine,9); printf("\n+ 按照SCAN算法磁道的访问顺序为 :"); Min=64000; for(j=x;j<=y;j++) { if(RLine[j]>Han) Temp=RLine[j]-Han; else Temp=Han-RLine[j]; if(Temp =Han) Order=0; Han=RLine[h]; DelInq(RLine,h,k); k--; while(m>0) { if(Order==1) { for(j=x;j<=y;j++) { h=-1; Min=64000; for(n=x;n<=k;n++) { if(RLine[n]<=Han) { Temp=Han-RLine[n]; if(Temp =Han) { Temp=RLine[n]-Han; if(Temp 5) { Best[Jage][1]=All; Best[Jage][0]=3; Jage++; Aver=All/10; printf("\n+ 移动磁道数 :<%5d> ",All); printf("\n+ 平均寻道长度 :*%5d* ",Aver); } return(Han); } void CSCAN(int Han,int DiscL[]) { int j,h,n,Temp,m,k,All,Last; int RLine[10]; int Min; m=2; k=9; All=0; Last=Han; CopyL(DiscL,RLine,9); printf("\n+ "); printf("按照CSCAN算法磁道的访问顺序为 :"); while(k>=0) { for(j=0;j<=9;j++) { h=-1; Min=64000; for(n=0;n<=k;n++) { if(RLine[n]>=Han) { Temp=RLine[n]-Han; if(Temp =0) { Temp=Last-Han; All=All+Temp; } } Best[Jage][1]=All; Best[Jage][0]=4; Jage++; Aver=All/10; printf("\n+ 移动磁道数 :<%5d> ",All); printf("\n+ 平均寻道长度 :*%5d* ",Aver); } void N_Step_SCAN(int Han1,int DiscL[]) { int i,m,k; int RLine1[10]; NAll=0; m=2; k=9; i=-1; CopyL(DiscL,RLine1,9); printf("\n+ "); printf("按照N_Step_SCAN算法磁道的访问顺序为 ::"); for(m=0;m<2;m++) { Han1=SCAN(Han1,RLine1,i+1,i+5); i=i+5; } Best[Jage][1]=NAll; Best[Jage][0]=5; Aver=NAll/10; printf("\n+ 移动磁道数 :<%5d> ",NAll); printf("\n+ 平均寻道长度 :*%5d* ",Aver); } void PaiXu() { int i,j,Temp; for(i=0;i<5;i++) { for(j=0;j<4;j++) { if(Best[j][1]>Best[j+1][1]) { Temp=Best[j+1][1]; Best[j+1][1]=Best[j][1]; Best[j][1]=Temp; Temp=Best[j+1][0]; Best[j+1][0]=Best[j][0]; Best[j][0]=Temp; } } } }