www.pudn.com > diaodu.rar > diaodu.cpp


#include "stdio.h" 
#include "stdlib.h" 
#include  
void 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(Temp5) 
	{ 
		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; 
			} 
		} 
	} 
}