⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit4.cpp

📁 广东工业大学 超牛逼的课程设计 值得一看
💻 CPP
字号:
//---------------------------------------------------------------------------
//计算机02(7)班 洪凌郁 19号
#include <vcl.h>
#pragma hdrstop
#include "stdio.h"
#include "stdlib.h"
#include <iostream.h>
#include "Unit4.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm4 *Form4;
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;
int form4_flag;
int DiscLine[10]; //要寻找的磁道号个数
int Hand;  //初始化磁道号
//---------------------------------------------------------------------------
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)
{ AnsiString str2;
	int i;
	for(i=0;i<=x;i++)
	{
     
      str2+=IntToStr(Pri[i]);
      str2+=" ,";
	}
 Form4->Memo1->Lines->Add(str2);
}
//---------------------------------------------------------------------------
void SetDI(int DiscL[])
{  int i;
   for(i=0;i<=9;i++)
    {
    DiscL[i]=rand()%Limit;
	}
  Print(DiscL,9);
}
//---------------------------------------------------------------------------
void DelInq(int Sour[],int x,int y)
{
	int i;
	for(i=x;i<y;i++)
	{
	Sour[i]=Sour[i+1];
        x++;
	}
}
//---------------------------------------------------------------------------
void FCFS(int Han,int DiscL[])
{   AnsiString str4;
	int RLine[10];
	int i,k,All,Temp;
	All=0;
	k=9;
	CopyL(DiscL,RLine,9);
     str4=" 按照FCFS算法磁道的访问顺序为:\r\n\r\n";
	for(i=0;i<=9;i++)
	{
		Temp=RLine[0]-Han;
		if(Temp<0)
			Temp=(-Temp);
                str4+=IntToStr(RLine[0]);
                str4+=" , ";
		All=Temp+All;
		DelInq(RLine,0,k);
		k--;
	}
	Best[Jage][1]=All;
	Best[Jage][0]=1;
	Jage++;
	Aver=All/10;
        str4+="\r\n\r\n<<<<移动的磁道总数为: ";
        str4+=IntToStr(All);
        str4+="  ;  ";
        str4+="平均寻道总数为: ";
        str4+=IntToStr(Aver);
        str4+="   >>>>\r\n";
        Form4->Memo2->Lines->Add(str4);
}
//---------------------------------------------------------------------------
void SSTF(int Han,int DiscL[])
{ AnsiString str5;
	int i,j,k,h,All;
	int Temp;
	int RLine[10];
	int Min;
	All=0;
	k=9;
	CopyL(DiscL,RLine,9);
        str5="按照SSTF算法磁道的访问顺序为   : \r\n ";
	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<Min)
			{
				Min=Temp;
				h=j;
			}
		}
		All=All+Min;
               str5+=IntToStr(RLine[h]);
                str5+=" , ";
		Han=RLine[h];
		DelInq(RLine,h,k);
		k--;
	}
	Best[Jage][1]=All;
	Best[Jage][0]=2;
	Jage++;
	Aver=All/10;
        str5+="\r\n\r\n<<<<移动的磁道总数为: ";
        str5+=IntToStr(All);
        str5+="  ;  ";
        str5+="平均寻道总数为: ";
        str5+=IntToStr(Aver);
        str5+="   >>>>\r\n";
        Form4->Memo2->Lines->Add(str5);
        }
//---------------------------------------------------------------------------
int SCAN(int Han,int DiscL[],int x,int y)
{  AnsiString str6;
    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);
     str6="按照SCAN算法磁道的访问顺序为:\r\n";
	Min=64000;
	for(j=x;j<=y;j++)
	{
		if(RLine[j]>Han)
			Temp=RLine[j]-Han;
		else
			Temp=Han-RLine[j];
		if(Temp<Min)
		{
			Min=Temp;
			h=j;
		}
	}
	All=All+Min;
     str6+=IntToStr(RLine[h]);
                str6+=" , ";
	if(RLine[h]>=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<Min)
						{
							Min=Temp;
			            	h=n;
						}
					}
				}
				if(h!=-1)
				{
					All=All+Min;
                                         str6+=IntToStr(RLine[h]);
                                         str6+=" , ";
					Han=RLine[h];
					DelInq(RLine,h,k);
					k--;
				}
			}
			Order=0;
		    m--;
		}
		else
		{
			for(j=x;j<=y;j++)
			{
				h=-1;
				Min=64000;
				for(n=x;n<=k;n++)
				{
					if(RLine[n]>=Han)
					{
						Temp=RLine[n]-Han;
	 		            if(Temp<Min)
						{
							Min=Temp;
			       	        h=n;
						}
					}
				}
				if(h!=-1)
				{
					All=All+Min;
                                        str6+=IntToStr(RLine[h]);
                                        str6+=" , ";
					Han=RLine[h];
					DelInq(RLine,h,k);
					k--;
				}
			}
			Order=1;
		    m--;
		}
	}
	NAll=NAll+All;
	if((y-x)>5)
	{
		Best[Jage][1]=All;
		Best[Jage][0]=3;
		Jage++;
		Aver=All/10;
                str6+="\r\n\r\n<<<<移动的磁道总数为: ";
                str6+=IntToStr(All);
                str6+="  ;  ";
                str6+="平均寻道总数为: ";
                str6+=IntToStr(Aver);
                str6+="   >>>>\r\n";
	}
       Form4->Memo2->Lines->Add(str6);
	return(Han);

}
//---------------------------------------------------------------------------
void CSCAN(int Han,int DiscL[])
{
    AnsiString str7;
	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);
        str7="按照CSCAN算法磁道的访问顺序为:\r\n";
	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<Min)
					{
						Min=Temp;
			       	    h=n;
					}
				}
			}
			if(h!=-1)
			{
				All=All+Min;
                                str7+=IntToStr(RLine[h]);
                                        str7+=" , ";
				Han=RLine[h];
				Last=RLine[h];
				DelInq(RLine,h,k);
				k--;
			}
		}
		m--;
		Han=0;
		if(k>=0)
		{
			Temp=Last-Han;
			All=All+Temp;
		}
	}
	Best[Jage][1]=All;
	Best[Jage][0]=4;
	Jage++;
	Aver=All/10;
        str7+="\r\n\r\n<<<<移动的磁道总数为: ";
        str7+=IntToStr(All);
        str7+="  ;  ";
        str7+="平均寻道总数为: ";
        str7+=IntToStr(Aver);
        str7+="   >>>>\r\n";
        Form4->Memo2->Lines->Add(str7);
}
//---------------------------------------------------------------------------
void N_Step_SCAN(int Han1,int DiscL[])
{  AnsiString str8;
	int i,m;
	int RLine1[10];
    NAll=0;
	m=2;
	i=-1;
	CopyL(DiscL,RLine1,9);
        str8="\r\n按照CSCAN算法磁道的访问顺序为:\r\n";
	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;
        str8+="\r\n\r\n<<<<移动的磁道总数为: ";
        str8+=IntToStr(NAll);
        str8+="  ;  ";
        str8+="平均寻道总数为: ";
        str8+=IntToStr(Aver);
        str8+="   >>>>\r\n";
  Form4->Memo2->Lines->Add(str8);
}
//---------------------------------------------------------------------------
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;
			}
		}
	}
}

//---------------------------------------------------------------------------
__fastcall TForm4::TForm4(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm4::BitBtn2Click(TObject *Sender)
{  AnsiString str1;
	int i;
	int Con=1;
        while(Con!=0)
	{
		Jage=0;
         switch(form4_flag)
	{
	case 1:
		FCFS(Hand,DiscLine); Con=0;
		break;
	case 2:
                {
		SSTF(Hand,DiscLine); Con=0; }
		break;
	case 3:
                {
		SCAN(Hand,DiscLine,0,9);Con=0;}
		break;
	case 4:
                {
		CSCAN(Hand,DiscLine);Con=0;   }
		break;
	case 5:
                {
		N_Step_SCAN(Hand,DiscLine);Con=0; }
		break;

                

         default:  break;
	}

         Form4->Memo2->Lines->Add(str1);
          }
}
//---------------------------------------------------------------------------
void __fastcall TForm4::RadioButton5Click(TObject *Sender)
{

 if(RadioButton5->Checked)
form4_flag=5;
}
//---------------------------------------------------------------------------
void __fastcall TForm4::RadioButton2Click(TObject *Sender)
{
  if(RadioButton2->Checked)
form4_flag=2;

}
//---------------------------------------------------------------------------
void __fastcall TForm4::RadioButton3Click(TObject *Sender)
{

 if(RadioButton3->Checked)
form4_flag=3;

}
//---------------------------------------------------------------------------
void __fastcall TForm4::RadioButton4Click(TObject *Sender)
{

 if(RadioButton4->Checked)
form4_flag=4;
 }
//---------------------------------------------------------------------------
void __fastcall TForm4::RadioButton1Click(TObject *Sender)
{
 if(RadioButton1->Checked)
form4_flag=1;
}
//---------------------------------------------------------------------------
void __fastcall TForm4::BitBtn1Click(TObject *Sender)
{
  Hand=StrToInt(Form4->Edit1->Text);
  Limit=StrToInt(Form4->Edit2->Text);
  SetDI(DiscLine);
  Form4->BitBtn1->Enabled=false;
  Form4->BitBtn2->Enabled=true;
  Form4->BitBtn4->Enabled=true;
  }
//---------------------------------------------------------------------------

void __fastcall TForm4::BitBtn3Click(TObject *Sender)
{
Form4->Memo1->Clear();
Form4->Memo2->Clear();
 Form4->BitBtn1->Enabled=true;
 Form4->BitBtn2->Enabled=true;
 Form4->BitBtn4->Enabled=true;
}
//---------------------------------------------------------------------------




void __fastcall TForm4::FormCreate(TObject *Sender)
{
 if(RadioButton1->Checked)
form4_flag=1;
if(RadioButton2->Checked)
form4_flag=2;
if(RadioButton3->Checked)
form4_flag=3;
if(RadioButton4->Checked)
form4_flag=4;
if(RadioButton5->Checked)
form4_flag=5;
}
//---------------------------------------------------------------------------

void __fastcall TForm4::BitBtn4Click(TObject *Sender)
{AnsiString str1;
 int i;
 FCFS(Hand,DiscLine);
                SSTF(Hand,DiscLine);
                SCAN(Hand,DiscLine,0,9);
                CSCAN(Hand,DiscLine);
                N_Step_SCAN(Hand,DiscLine);
		PaiXu();
                str1+="按算法的寻道效率进行排序如下:";

		for(i=0;i<5;i++)
		{
                str1+=IntToStr(Best[i][0]);
                str1+="  ";
		}//for
 str1+="\r\n\r\n  通过对各种算法进行比较,由此可以得出结论:\r\n\r\n ";
 str1+="扫描算法(SCAN)的寻道效率比较高; 最短寻道时间算法(SSTF)的效率紧跟其后 ; 循环扫描算法(CSCAN)和N-Step-SCAN算法次之 ; ";
 str1+=" 先来先服务(FCFS)的寻道效率最低!";
 Form4->Memo2->Lines->Add(str1);
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -