磁盤調(diào)度課程設(shè)計(jì)_第1頁
已閱讀1頁,還剩29頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  目 錄</b></p><p>  1.操作系統(tǒng)課程設(shè)計(jì)任務(wù)描述2</p><p>  2.問題定義與需求分析2</p><p>  2.1算法的描述2</p><p>  2.2程序要做什么3</p><p><b>  3.概要設(shè)計(jì)4<

2、/b></p><p><b>  4.詳細(xì)設(shè)計(jì)5</b></p><p>  4.1抽象數(shù)據(jù)類型的定義5</p><p>  4.2程序流程圖以及核心代碼5</p><p>  4.2.1先來先服務(wù)調(diào)度算法5</p><p>  4.2.2最短尋道時(shí)間優(yōu)先調(diào)度算法6</p&

3、gt;<p>  4.2.3掃描算法8</p><p>  4.2.4循環(huán)掃描算法10</p><p><b>  5運(yùn)行結(jié)果12</b></p><p><b>  6測試15</b></p><p><b>  7結(jié)論16</b></p>

4、<p><b>  8參考文獻(xiàn)17</b></p><p>  9附錄(源代碼)17</p><p>  操作系統(tǒng)課程設(shè)計(jì)任務(wù)描述</p><p>  設(shè)計(jì)目的:加深對(duì)磁盤調(diào)度算法的進(jìn)一步認(rèn)識(shí),加強(qiáng)實(shí)踐動(dòng)手能力和程序開發(fā)能力的培養(yǎng),提高分析問題解決問題的能力,培養(yǎng)代碼編寫能力,以鞏固和加深磁盤調(diào)度的概念。操作系統(tǒng)是一門工程性很

5、強(qiáng)的課程,它不僅要求學(xué)生掌握操作系統(tǒng)的工作原理和理論知識(shí),也要求學(xué)生的實(shí)際動(dòng)手能力,以加深對(duì)所學(xué)習(xí)內(nèi)容的理解,使學(xué)生熟練地掌握計(jì)算機(jī)的操作方法,使用各種軟件工具,加強(qiáng)對(duì)課程內(nèi)容的理解。這次課程設(shè)計(jì),就是通過模擬磁臂調(diào)度來加深對(duì)操作系統(tǒng)中磁臂調(diào)度概念的理解。</p><p>  設(shè)計(jì)要求:編程序?qū)崿F(xiàn)下述磁盤調(diào)度算法,并求出每種算法的平均尋道長度;要求設(shè)計(jì)主界面可以靈活選擇某算法,且以下算法都要實(shí)現(xiàn)</p>

6、;<p>  1、先來先服務(wù)算法(FCFS)</p><p>  2、最短尋道時(shí)間優(yōu)先算法(SSTF)</p><p>  3、掃描算法(SCAN)</p><p>  4、循環(huán)掃描算法(CSCAN)</p><p>  2.問題定義與需求分析</p><p><b>  2.1算法的描述<

7、;/b></p><p>  先來先服務(wù)FCFS:公平,簡單,每個(gè)進(jìn)程的請(qǐng)求都能依次得到處理。沒有對(duì)尋道優(yōu)化,平均尋道時(shí)間長。</p><p>  最短時(shí)間優(yōu)先調(diào)度算法SSTF:要求訪問的磁道是當(dāng)前磁頭所在的磁道最近,每次尋道時(shí)間最短,但不能保證平均尋道時(shí)間最短??赡軐?dǎo)致一些請(qǐng)求無限期推延,產(chǎn)生饑餓現(xiàn)象。</p><p>  掃描算法SCAN:不僅考慮當(dāng)前磁道

8、的距離,優(yōu)先考慮在磁道前進(jìn)方向的最短時(shí)間,排除磁頭在盤面上的往復(fù)運(yùn)動(dòng),避免了出現(xiàn)“饑餓”現(xiàn)象。電梯原理。</p><p>  循環(huán)掃描算法:是SCAN的改良。磁頭改變方向時(shí),以到達(dá)請(qǐng)求服務(wù)的最短時(shí)間。對(duì)中間請(qǐng)求服務(wù)更有利。</p><p><b>  2.2程序要做什么</b></p><p>  通過模擬設(shè)計(jì)磁盤驅(qū)動(dòng)調(diào)度程序,觀察驅(qū)動(dòng)調(diào)度程序

9、的動(dòng)態(tài)運(yùn)行過程.且實(shí)現(xiàn)以下算法:</p><p>  1、先來先服務(wù)算法(FCFS)</p><p>  2、最短尋道時(shí)間優(yōu)先算法(SSTF)</p><p>  3、掃描算法(SCAN)</p><p>  4、循環(huán)掃描算法(CSCAN)</p><p>  (1)輸入的形式和范圍:輸入為數(shù)字類型</p>

10、<p>  (2)輸出形式:數(shù)組和字符串</p><p>  (3)程序的功能:實(shí)現(xiàn)磁盤調(diào)度算法的演示</p><p><b>  (4)測試數(shù)據(jù):</b></p><p>  正確的輸入:合法的整數(shù)類型.</p><p>  期望輸出:正確輸出結(jié)果</p><p>  錯(cuò)誤的輸入:

11、字符型,浮點(diǎn)數(shù)型</p><p><b>  期望輸出:提示錯(cuò)誤</b></p><p>  (5)開發(fā)環(huán)境及語言的選擇</p><p>  Visual studio 2010</p><p><b>  C#語言</b></p><p><b>  3.概要設(shè)計(jì)

12、</b></p><p>  1.先來先服務(wù)(FCFS)的設(shè)計(jì)思想</p><p>  即先來的請(qǐng)求先被響應(yīng)。FCFS策略看起來似乎是相當(dāng)"公平"的,但是當(dāng)請(qǐng)求的頻率過高的時(shí)候FCFS策略的響應(yīng)時(shí)間就會(huì)大大延長。FCFS策略為我們建立起一個(gè)隨機(jī)訪問機(jī)制的模型,但是假如用這個(gè)策略反復(fù)響應(yīng)從里到外的請(qǐng)求,那么將會(huì)消耗大量的時(shí)間。為了盡量降低尋道時(shí)間,看來我們需要

13、對(duì)等待著的請(qǐng)求進(jìn)行適當(dāng)?shù)呐判颍皇呛唵蔚氖褂肍CFS策略。這個(gè)過程就叫做磁盤調(diào)度管理。有時(shí)候fcfs也被看作是最簡單的磁盤調(diào)度算法</p><p>  2.最短尋道時(shí)間優(yōu)先調(diào)度(SSTF)的設(shè)計(jì)思想</p><p>  最短時(shí)間優(yōu)先算法選擇這樣的進(jìn)程。要求訪問的磁道,與當(dāng)前磁頭所在的磁道距離最近,以使每次的尋道時(shí)間最短。</p><p>  3.掃描算法(SCAN

14、)的設(shè)計(jì)思想</p><p>  掃描(SCAN)調(diào)度算法:該算法不僅考慮到欲訪問 的磁道與當(dāng)前磁道間的距離,更優(yōu)先考慮的是磁頭當(dāng)前的移動(dòng)方向。例如,當(dāng)磁頭正在自里向外移動(dòng)時(shí),SCAN算法所考慮的下一個(gè)訪問對(duì)象,應(yīng)是其欲訪問的磁道,既在當(dāng)前磁道之外,又是距離最近的。這樣自里向外的訪問,直至再無更外的磁道需要訪問時(shí),才將磁道換向自外向里移動(dòng)。這時(shí),同樣也是每次選擇這樣的進(jìn)程來調(diào)度,也就是要訪問的當(dāng)前位置內(nèi)距離最近者

15、,這樣,磁頭又逐步地從外向里移動(dòng),直至再無更里面的磁道要訪問,從而避免了出現(xiàn)“饑餓”現(xiàn)像。</p><p>  4.循環(huán)掃描(CSACN)的設(shè)計(jì)思想</p><p>  循環(huán)掃描(CSCAN)算法:當(dāng)磁頭剛從里向外移動(dòng)而越過了某一磁道時(shí),恰好又有一進(jìn)程請(qǐng)求訪問此磁道,這時(shí),該里程就必須等待,為了減少這種延遲,CSCAN算法規(guī)定磁頭單向移動(dòng),而本實(shí)驗(yàn)過程中我們所設(shè)計(jì)的是磁頭從里向外移動(dòng),而從

16、外向里移動(dòng)時(shí)只須改方向而已,本實(shí)驗(yàn)未實(shí)現(xiàn)。但本實(shí)驗(yàn)已完全能演示循環(huán)掃描的全過程。</p><p><b>  4.詳細(xì)設(shè)計(jì)</b></p><p>  4.1抽象數(shù)據(jù)類型的定義</p><p>  int num1,num2,num3; //分別存儲(chǔ)最大磁道號(hào)、當(dāng)前磁道數(shù)、磁道個(gè)數(shù)</p><p>  int[] arr

17、ay//存儲(chǔ)隨機(jī)生成的數(shù)組</p><p>  4.2程序流程圖以及核心代碼</p><p>  4.2.1先來先服務(wù)調(diào)度算法</p><p><b>  程序流程圖如下:</b></p><p><b>  核心代碼如下:</b></p><p>  for (int

18、 i = 0; i < array.Length;i++ )//輸出數(shù)組到listbox1</p><p><b>  {</b></p><p>  listBox1.Items.Add(array[i]);</p><p><b>  }</b></p><p>  num3 = Conv

19、ert.ToInt32(textBox3.Text);</p><p>  int[] remove=new int[array.Length]; //申明動(dòng)態(tài)數(shù)組保存移動(dòng)距離</p><p>  remove[0] = Math.Abs(num3-array[0]);</p><p>  sum += remove[0];</p><p

20、>  for (int i = 1; i < array.Length;i++ )//計(jì)算移動(dòng)距離保存到數(shù)組中</p><p><b>  {</b></p><p>  remove[i] = Math.Abs(array[i]-array[i-1]);</p><p>  sum += remove[i];</p>

21、<p><b>  }</b></p><p>  4.2.2最短尋道時(shí)間優(yōu)先調(diào)度算法</p><p><b>  程序流程圖如下:</b></p><p><b>  核心代碼如下:</b></p><p>  while (array[k] < num3)

22、 //確定當(dāng)前磁道在已排的序列中的位置</p><p><b>  {</b></p><p><b>  k++;</b></p><p><b>  }</b></p><p>  post1 = k - 1;</p><p>  post2 =

23、 k;</p><p>  while ((post1 >= 0) && (post2 < num2)) //邊界條件</p><p><b>  {</b></p><p>  if ((num3 - array[post1]) <= (array[post2] - num3))//判斷哪個(gè)位置離當(dāng)前磁道號(hào)最

24、近</p><p><b>  {</b></p><p>  array2[l] = Math.Abs(num3-array[post1]);//求出尋道距離</p><p>  listBox1.Items.Add(array[post1]);</p><p>  sum += num3 - array[post1]

25、;</p><p>  num3 = array[post1];</p><p>  post1 = post1 - 1;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b><

26、;/p><p>  array2[l] = Math.Abs(num3 - array[post2]);</p><p>  listBox1.Items.Add(array[post2]);</p><p>  sum += array[post2] - num3;</p><p>  num3 = array[post2];</p>

27、;<p>  post2 = post2 + 1;</p><p><b>  }</b></p><p><b>  l++;</b></p><p><b>  }</b></p><p>  if (post1 == -1)//判斷是否移動(dòng)到最左&l

28、t;/p><p><b>  {</b></p><p>  for (int j = post2,i=l; j < num2; j++,i++)</p><p><b>  {</b></p><p>  array2[i] = Math.Abs(array[j] - array[j - 1])

29、;</p><p>  listBox1.Items.Add(array[j]);//輸出磁道序列</p><p><b>  }</b></p><p>  sum += array[num2 - 1] - array[0];</p><p><b>  }</b></p><

30、;p><b>  else</b></p><p><b>  {</b></p><p>  for (int j = post1,i=l; j >= 0; j--,i++)</p><p><b>  {</b></p><p>  array2[i] = Ma

31、th.Abs(array[j+1]-array[j]);</p><p>  listBox1.Items.Add(array[j]);</p><p><b>  }</b></p><p>  sum += array[num2 - 1] - array[0];</p><p><b>  }</b&

32、gt;</p><p><b>  }</b></p><p><b>  4.2.3掃描算法</b></p><p><b>  程序流程圖如下:</b></p><p><b>  核心代碼如下:</b></p><p>  w

33、hile (array[k] < num3) //逐一比較以確定K值確定位置</p><p><b>  {</b></p><p><b>  k++;</b></p><p><b>  }</b></p><p>  post1 = k - 1;</p>

34、<p>  post2 = k;</p><p>  if (comboBox1.Text == "磁道號(hào)減小方向")//判斷選擇方向</p><p><b>  {</b></p><p>  for (int j = post1; j >= 0; j--)</p><p>&l

35、t;b>  {</b></p><p>  array2[post1-j] = array[j];</p><p>  listBox1.Items.Add(array[j]);</p><p><b>  }</b></p><p>  for (int j = post2; j < num2;

36、 j++)</p><p><b>  {</b></p><p>  array2[j] = array[j];</p><p>  listBox1.Items.Add(array[j]);</p><p><b>  }</b></p><p>  array3[0]

37、= Math.Abs(num3 - array2[0]);</p><p>  for (int i = 1; i < array2.Length; i++)</p><p><b>  {</b></p><p>  array3[i] = Math.Abs(array2[i] - array2[i - 1]);</p>

38、<p><b>  }</b></p><p>  for (int i = 0; i < array.Length; i++)</p><p><b>  {</b></p><p>  sum += array3[i];</p><p><b>  }</b>

39、;</p><p><b>  }</b></p><p>  else if (comboBox1.Text == "磁道號(hào)增加方向")//判斷選擇方向</p><p><b>  {</b></p><p>  for (int j = post2; j < num2;

40、 j++)</p><p><b>  {</b></p><p>  array2[j - post2] = array[j];</p><p>  listBox1.Items.Add(array[j]);</p><p><b>  }</b></p><p>  fo

41、r (int j = post1; j >= 0; j--)</p><p><b>  {</b></p><p>  array2[num2 - 1 - j] = array[j];</p><p>  listBox1.Items.Add(array[j]);</p><p><b>  }<

42、/b></p><p>  array3[0] = Math.Abs(num3 - array2[0]);</p><p>  for (int i = 1; i < array2.Length; i++)</p><p><b>  {</b></p><p>  array3[i] = Math.Abs(

43、array2[i] - array2[i - 1]);</p><p><b>  }</b></p><p>  for (int i = 0; i < array.Length; i++)</p><p><b>  {</b></p><p>  sum += array3[i];<

44、;/p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  MessageBox.Show("請(qǐng)選擇

45、移動(dòng)方向");//如果沒有選擇彈出對(duì)話框</p><p><b>  return;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  4.2.4循環(huán)掃描算法</p><p>  程序流

46、程圖同掃描算法流程圖</p><p><b>  核心代碼如下:</b></p><p>  while (array[k] < num3)</p><p><b>  {</b></p><p><b>  k++;</b></p><p>&l

47、t;b>  }</b></p><p>  post1 = k - 1;</p><p>  post2 = k;</p><p>  if (comboBox1.Text == "磁道號(hào)減小方向")</p><p><b>  {</b></p><p> 

48、 for (int j = post1; j >= 0; j--)</p><p><b>  {</b></p><p>  array2[post1 - j] = array[j];</p><p>  listBox1.Items.Add(array[j]);</p><p><b>  }<

49、/b></p><p>  for (int j = num2-1,i=post2; j>=post2; j--,i++)</p><p><b>  {</b></p><p>  array2[i] = array[j];</p><p>  listBox1.Items.Add(array[j]);&l

50、t;/p><p><b>  }</b></p><p>  array3[0] = Math.Abs(num3 - array2[0]);</p><p>  for (int i = 1; i < array2.Length; i++)</p><p><b>  {</b></p>

51、;<p>  array3[i] = Math.Abs(array2[i] - array2[i - 1]);</p><p><b>  }</b></p><p>  for (int i = 0; i < array.Length; i++)</p><p><b>  {</b></p&g

52、t;<p>  sum += array3[i];</p><p><b>  }</b></p><p><b>  }</b></p><p>  else if (comboBox1.Text == "磁道號(hào)增加方向")</p><p><b>  

53、{</b></p><p>  for (int j = post2; j < num2; j++)</p><p><b>  {</b></p><p>  array2[j - post2] = array[j];</p><p>  listBox1.Items.Add(array[j]);&l

54、t;/p><p><b>  }</b></p><p>  for (int j = 0, i = num2 - post2 - 1; j < post2; j++, i++)</p><p><b>  {</b></p><p>  array2[i] = array[j];</p&g

55、t;<p>  listBox1.Items.Add(array[j]);</p><p><b>  }</b></p><p>  array3[0] = Math.Abs(num3 - array2[0]);</p><p>  for (int i = 1; i < array2.Length; i++)</p

56、><p><b>  {</b></p><p>  array3[i] = Math.Abs(array2[i] - array2[i - 1]);</p><p><b>  }</b></p><p>  for (int i = 0; i < array.Length; i++)</

57、p><p><b>  {</b></p><p>  sum += array3[i];</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p>

58、<p><b>  {</b></p><p>  MessageBox.Show("請(qǐng)選擇移動(dòng)方向");//如果沒有選擇彈出對(duì)話框</p><p><b>  return;</b></p><p><b>  }</b></p><p>&

59、lt;b>  }</b></p><p><b>  5運(yùn)行結(jié)果</b></p><p>  先來先服務(wù)算法(FCFS)</p><p>  最短尋道時(shí)間優(yōu)先算法(SSTF)</p><p>  掃描算法(SCAN)</p><p><b>  磁道號(hào)增加方向</

60、b></p><p><b>  磁道號(hào)減小方向</b></p><p>  循環(huán)掃描算法(CSCAN)</p><p><b>  磁道號(hào)增加方向</b></p><p><b>  磁道號(hào)減小方向</b></p><p><b>  

61、6測試</b></p><p>  1、輸入合法的整型數(shù)據(jù)</p><p><b>  輸出結(jié)果:</b></p><p>  結(jié)論:正常輸出,結(jié)果正確。</p><p><b>  2、輸入字符型數(shù)據(jù)</b></p><p><b>  輸出結(jié)果:&l

62、t;/b></p><p>  結(jié)論:彈出相應(yīng)的對(duì)話框,提示錯(cuò)誤信息。</p><p><b>  7結(jié)論</b></p><p><b>  心得體會(huì):</b></p><p>  此次操作系統(tǒng)的課程設(shè)計(jì)我寫的是磁盤調(diào)度算法,在僅僅一個(gè)星期的時(shí)間里,從理論到實(shí)踐,學(xué)到很多很多的的東西,同時(shí)不

63、僅可以鞏固了以前所學(xué)過的知識(shí),而且學(xué)到了很多在書本上所沒有學(xué)到過的知識(shí)。通過這次課程設(shè)計(jì)使我懂得了親自動(dòng)手編寫代碼和理論的差距。中間遇到了很多困難,代碼的各種出錯(cuò),程序的各種bug。但經(jīng)過自己的努力不斷調(diào)試解決了這些問題,感覺收獲很多。</p><p>  通過本次實(shí)驗(yàn)我知道了一個(gè)好的軟件工程需要做好設(shè)計(jì)前的準(zhǔn)備工作時(shí),先把這部分工作做完了。在設(shè)計(jì)總的程序框架的時(shí)候,要注意各功能模塊的位置,盡量做到簡潔、有序;各

64、功能模塊與主程序要正確銜接。不僅僅要寫計(jì)算機(jī)看懂的代碼,更重要的是要寫出其他人可以看懂的代碼。</p><p><b>  8參考文獻(xiàn)</b></p><p>  [1]湯小丹、梁紅兵、哲鳳屏、湯子瀛. 計(jì)算機(jī)操作系統(tǒng)[M]. 西安電子科技大學(xué)出版社. 2007年</p><p>  [2]張麗芬. 操作系統(tǒng)設(shè)計(jì)教程[M]. 清華大學(xué)出版社.2

65、006年</p><p>  [3]湯巍、菀勛. 操作系統(tǒng)實(shí)驗(yàn)指導(dǎo)書[M]. 沈陽理工大學(xué)出版社. 2009年</p><p><b>  9附錄(源代碼)</b></p><p>  using System;</p><p>  using System.Collections.Generic;</p>

66、<p>  using System.ComponentModel;</p><p>  using System.Data;</p><p>  using System.Drawing;</p><p>  using System.Linq;</p><p>  using System.Text;</p>&

67、lt;p>  using System.Windows.Forms;</p><p>  namespace 磁盤調(diào)度算法</p><p><b>  {</b></p><p>  public partial class Form1 : Form</p><p><b>  {</b>&l

68、t;/p><p><b>  int num2;</b></p><p><b>  int num1;</b></p><p><b>  int num3;</b></p><p>  int[] array;</p><p>  int[] array

69、_n;</p><p>  public Form1()</p><p><b>  {</b></p><p>  InitializeComponent();</p><p><b>  }</b></p><p>  private void label1_Click(

70、object sender, EventArgs e)</p><p><b>  {</b></p><p><b>  }</b></p><p>  private void label2_Click(object sender, EventArgs e)</p><p><b> 

71、 {</b></p><p><b>  }</b></p><p>  private void textBox4_TextChanged(object sender, EventArgs e)</p><p><b>  {</b></p><p><b>  }</

72、b></p><p>  public void button1_Click(object sender, EventArgs e)</p><p><b>  {</b></p><p>  if (int.TryParse(textBox2.Text, out num1)==false) //判斷輸入是否合法</p>

73、<p><b>  {</b></p><p>  MessageBox.Show("最大磁道號(hào)不是合法數(shù)");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  else if (in

74、t.TryParse(textBox4.Text, out num2) == false) //判斷輸入是否合法</p><p><b>  {</b></p><p>  MessageBox.Show("磁道個(gè)數(shù)不是合法數(shù)");</p><p><b>  return;</b></p>

75、<p><b>  }</b></p><p>  else if (int.TryParse(textBox3.Text, out num3) == false) //判斷輸入是否合法</p><p><b>  {</b></p><p>  MessageBox.Show("當(dāng)前磁道號(hào)不是合法

76、數(shù)");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  else if (num3 > num1)</p><p><b>  {</b></p><p>  Messag

77、eBox.Show("當(dāng)前磁道號(hào)超過最大磁道號(hào)"); //判斷輸入是否合法</p><p><b>  return;</b></p><p><b>  }</b></p><p>  array = new int[num2]; //動(dòng)態(tài)數(shù)組</p><p>  array_

78、n=new int[num2]; //一個(gè)用來存原始數(shù)組</p><p>  Random rd = new Random();</p><p>  String str = " ";</p><p>  for (int i = 0; i < num2;i++ ) //生成隨機(jī)數(shù)組</p><p><b&

79、gt;  {</b></p><p>  array[i] = rd.Next(1,num1);</p><p><b>  }</b></p><p>  for (int i = 0; i < num2; i++)</p><p><b>  {</b></p>

80、<p>  array_n[i] = array[i];</p><p><b>  }</b></p><p>  for (int i=0; i<num2;i++)</p><p><b>  {</b></p><p>  str += " " + arra

81、y[i].ToString();//數(shù)組用空格隔開</p><p>  label4.Text =str; //輸出到label4中</p><p><b>  }</b></p><p><b>  }</b></p><p>  private void textB

82、ox2_TextChanged(object sender, EventArgs e)</p><p><b>  {</b></p><p><b>  }</b></p><p>  private void textBox3_TextChanged(object sender, EventArgs e)</p&

83、gt;<p><b>  {</b></p><p><b>  }</b></p><p>  private void Form1_Load(object sender, EventArgs e)</p><p><b>  {</b></p><p><

84、;b>  }</b></p><p>  private void button2_Click(object sender, EventArgs e)//先來先服務(wù)算法</p><p><b>  {</b></p><p>  listBox1.Items.Clear(); //清空listbox</p

85、><p>  listBox2.Items.Clear();</p><p>  int sum = 0;</p><p>  double aver = 0.0;</p><p>  for (int i = 0; i < num2; i++)</p><p><b>  {</b></

86、p><p>  array[i] = array_n[i];</p><p><b>  }</b></p><p>  for (int i = 0; i < array.Length;i++ )//輸出數(shù)組到listbox1</p><p><b>  {</b></p><

87、;p>  listBox1.Items.Add(array[i]);</p><p><b>  }</b></p><p>  num3 = Convert.ToInt32(textBox3.Text);</p><p>  int[] remove=new int[array.Length]; //申明動(dòng)態(tài)數(shù)組保存移動(dòng)距離&l

88、t;/p><p>  remove[0] = Math.Abs(num3-array[0]);</p><p>  sum += remove[0];</p><p>  for (int i = 1; i < array.Length;i++ )//計(jì)算移動(dòng)距離保存到數(shù)組中</p><p><b>  {</b>&l

89、t;/p><p>  remove[i] = Math.Abs(array[i]-array[i-1]);</p><p>  sum += remove[i];</p><p><b>  }</b></p><p>  for (int i = 0; i < array.Length; i++)</p>

90、<p><b>  {</b></p><p>  listBox2.Items.Add(remove[i]);</p><p><b>  }</b></p><p>  aver = Convert.ToDouble(sum) / Convert.ToDouble(array.Length);//計(jì)算平均

91、移動(dòng)距離</p><p>  label6.Text = sum.ToString();</p><p>  label8.Text = aver.ToString("0.00");</p><p><b>  }</b></p><p>  private void button3_Click(ob

92、ject sender, EventArgs e)//最短尋道算法</p><p><b>  {</b></p><p>  listBox1.Items.Clear();</p><p>  listBox2.Items.Clear();</p><p>  int temp=0;</p><p&

93、gt;  int[] remove=new int[num2];</p><p>  int sum = 0;</p><p><b>  int k=0;</b></p><p>  int post1,post2;</p><p>  double aver = 0.0;</p><p>  

94、int[] array2 = new int[num2];</p><p>  int l = 0;</p><p>  for (int i = 0; i < num2; i++)</p><p><b>  {</b></p><p>  array[i] = array_n[i];</p>&l

95、t;p><b>  }</b></p><p>  for (int i = 0; i < array.Length-1;i++ ) //冒泡排序從小到大</p><p><b>  {</b></p><p>  for (int j = 0; j < array.Length -1-i;j++ )

96、</p><p><b>  {</b></p><p>  if(array[j]>array[j+1])</p><p><b>  {</b></p><p>  temp = array[j];</p><p>  array[j] = array[j + 1]

97、;</p><p>  array[j + 1] = temp;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if (array[num2 - 1] <

98、= num3) //判斷當(dāng)前磁道號(hào)是否比最大的大</p><p><b>  {</b></p><p>  int o = 0;</p><p>  array2[0]=num3-array[num2-1];</p><p><b>  o++;</b></p><p>

99、  for (int i = num2 - 1; i >= 0; i--,o++)</p><p><b>  {</b></p><p>  listBox1.Items.Add(array[i]);</p><p>  if (i > 0)</p><p><b>  {</b>&l

100、t;/p><p>  array2[o] = Math.Abs(array[i] - array[i - 1]);</p><p><b>  }</b></p><p><b>  }</b></p><p>  sum = num3 - array[0];</p><p>&

101、lt;b>  }</b></p><p>  else if (array[0] >= num3) //判斷當(dāng)前磁道號(hào)是否比最小的小</p><p><b>  {</b></p><p>  for (int i = 0; i < num2; i++)</p><p><b> 

102、 {</b></p><p>  listBox1.Items.Add(array[i]);</p><p><b>  }</b></p><p>  array2[0] = Math.Abs(num3-array[0]);</p><p>  for (int i = 1; i < array.Le

103、ngth; i++)</p><p><b>  {</b></p><p>  array2[i] = array[i] - array[i - 1];</p><p><b>  }</b></p><p>  sum = array[num2 - 1] - num3;</p>&

104、lt;p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  while (array[k] < num3) //確定當(dāng)前磁道在已排的序列中的位置</p><p><b> 

105、 {</b></p><p><b>  k++;</b></p><p><b>  }</b></p><p>  post1 = k - 1;</p><p>  post2 = k;</p><p>  while ((post1 >= 0) &am

106、p;& (post2 < num2)) //邊界條件</p><p><b>  {</b></p><p>  if ((num3 - array[post1]) <= (array[post2] - num3))//判斷哪個(gè)位置離當(dāng)前磁道號(hào)最近</p><p><b>  {</b></p&g

107、t;<p>  array2[l] = Math.Abs(num3-array[post1]);</p><p>  listBox1.Items.Add(array[post1]);</p><p>  sum += num3 - array[post1];</p><p>  num3 = array[post1];</p><

108、p>  post1 = post1 - 1;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  array2[l] = Math.Abs(num3 - array[post2]

109、);</p><p>  listBox1.Items.Add(array[post2]);</p><p>  sum += array[post2] - num3;</p><p>  num3 = array[post2];</p><p>  post2 = post2 + 1;</p><p><b&g

110、t;  }</b></p><p><b>  l++;</b></p><p><b>  }</b></p><p>  if (post1 == -1)</p><p><b>  {</b></p><p>  for (int j

111、= post2,i=l; j < num2; j++,i++)</p><p><b>  {</b></p><p>  array2[i] = Math.Abs(array[j] - array[j - 1]);</p><p>  listBox1.Items.Add(array[j]);</p><p>&

112、lt;b>  }</b></p><p>  sum += array[num2 - 1] - array[0];</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p>

113、<p>  for (int j = post1,i=l; j >= 0; j--,i++)</p><p><b>  {</b></p><p>  array2[i] = Math.Abs(array[j+1]-array[j]);</p><p>  listBox1.Items.Add(array[j]);<

114、/p><p><b>  }</b></p><p>  sum += array[num2 - 1] - array[0];</p><p><b>  }</b></p><p><b>  }</b></p><p>  for (int i = 0;

115、 i < array2.Length;i++ )</p><p><b>  {</b></p><p>  listBox2.Items.Add(array2[i]);</p><p><b>  }</b></p><p>  //計(jì)算平均尋道長度</p><p>

116、  aver = Convert.ToDouble(sum) / Convert.ToDouble(array.Length);</p><p>  label6.Text = sum.ToString();</p><p>  label8.Text = aver.ToString("0.00");</p><p><b>  }&l

117、t;/b></p><p>  private void button4_Click(object sender, EventArgs e)//掃描算法</p><p><b>  {</b></p><p>  listBox1.Items.Clear();</p><p>  listBox2.Items.Cl

118、ear();</p><p>  int temp=0;</p><p>  int sum = 0;</p><p><b>  int k=0;</b></p><p>  int post1,post2;</p><p>  double aver = 0.0;</p><

119、;p>  int[] array2 = new int[num2];</p><p>  int[] array3=new int[num2];</p><p>  for (int i = 0; i < num2; i++)</p><p><b>  {</b></p><p>  array[i] =

120、array_n[i];</p><p><b>  }</b></p><p>  for (int i = 0; i < array.Length-1;i++ )</p><p><b>  {</b></p><p>  for (int j = 0; j < array.Lengt

121、h -1-i;j++ )</p><p><b>  {</b></p><p>  if(array[j]>array[j+1])</p><p><b>  {</b></p><p>  temp = array[j];</p><p>  array[j] =

122、array[j + 1];</p><p>  array[j + 1] = temp;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if (array[nu

123、m2 - 1] <= num3)</p><p><b>  {</b></p><p>  for (int i = num2 - 1,j=0; i >= 0; i--,j++)</p><p><b>  {</b></p><p>  array2[j] = array[i];&l

124、t;/p><p>  listBox1.Items.Add(array[i]);</p><p><b>  }</b></p><p>  array3[0] = Math.Abs(num3-array2[0]);</p><p>  for (int i = 1; i < array2.Length;i++ )&l

125、t;/p><p><b>  {</b></p><p>  array3[i] = Math.Abs(array2[i] - array2[i - 1]);</p><p><b>  }</b></p><p>  sum = num3 - array[0];</p><p>

126、;<b>  }</b></p><p>  else if (array[0] >= num3)</p><p><b>  {</b></p><p>  for (int i = 0; i < num2; i++)</p><p><b>  {</b><

127、;/p><p>  array2[i] = array[i];</p><p>  listBox1.Items.Add(array[i]);</p><p><b>  }</b></p><p>  array3[0] = Math.Abs(num3 - array2[0]);</p><p> 

128、 for (int i = 1; i < array.Length; i++)</p><p><b>  {</b></p><p>  array3[i] = array2[i] - array2[i - 1];</p><p><b>  }</b></p><p>  sum = ar

129、ray[num2 - 1] - num3;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  while (array[k] < num3) //逐一比較以確定K值</p

130、><p><b>  {</b></p><p><b>  k++;</b></p><p><b>  }</b></p><p>  post1 = k - 1;</p><p>  post2 = k;</p><p>  i

131、f (comboBox1.Text == "磁道號(hào)減小方向")//判斷選擇方向</p><p><b>  {</b></p><p>  for (int j = post1; j >= 0; j--)</p><p><b>  {</b></p><p>  arra

132、y2[post1-j] = array[j];</p><p>  listBox1.Items.Add(array[j]);</p><p><b>  }</b></p><p>  for (int j = post2; j < num2; j++)</p><p><b>  {</b>

133、;</p><p>  array2[j] = array[j];</p><p>  listBox1.Items.Add(array[j]);</p><p><b>  }</b></p><p>  array3[0] = Math.Abs(num3 - array2[0]);</p><p&

134、gt;  for (int i = 1; i < array2.Length; i++)</p><p><b>  {</b></p><p>  array3[i] = Math.Abs(array2[i] - array2[i - 1]);</p><p><b>  }</b></p><

135、p>  for (int i = 0; i < array.Length; i++)</p><p><b>  {</b></p><p>  sum += array3[i];</p><p><b>  }</b></p><p><b>  }</b><

136、;/p><p>  else if (comboBox1.Text == "磁道號(hào)增加方向")//判斷選擇方向</p><p><b>  {</b></p><p>  for (int j = post2; j < num2; j++)</p><p><b>  {</b>

137、;</p><p>  array2[j - post2] = array[j];</p><p>  listBox1.Items.Add(array[j]);</p><p><b>  }</b></p><p>  for (int j = post1; j >= 0; j--)</p>&l

138、t;p><b>  {</b></p><p>  array2[num2 - 1 - j] = array[j];</p><p>  listBox1.Items.Add(array[j]);</p><p><b>  }</b></p><p>  array3[0] = Math.A

139、bs(num3 - array2[0]);</p><p>  for (int i = 1; i < array2.Length; i++)</p><p><b>  {</b></p><p>  array3[i] = Math.Abs(array2[i] - array2[i - 1]);</p><p>

140、;<b>  }</b></p><p>  for (int i = 0; i < array.Length; i++)</p><p><b>  {</b></p><p>  sum += array3[i];</p><p><b>  }</b></p&

141、gt;<p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  MessageBox.Show("請(qǐng)選擇移動(dòng)方向");//如果沒有選擇彈出對(duì)話框</p><p>&

142、lt;b>  return;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  for (int i = 0; i < array.Length; i++)</p><p><b>  {</b>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論