第一篇:軟件工程試驗(yàn)報(bào)告
實(shí)驗(yàn)項(xiàng)目名稱(chēng):需求分析
(所屬課程:軟件工程概論)
1.實(shí)驗(yàn)?zāi)康?/p>
1.選擇要設(shè)計(jì)的系統(tǒng),使用UML進(jìn)行需求分析,了解所要完成系統(tǒng)的功能需求,性能需求,接口需求等。
2.學(xué)習(xí)實(shí)使用Rational Rose 或其它軟件工程工具繪制用例圖、活動(dòng)圖。2.實(shí)驗(yàn)內(nèi)容
使用Rose 繪制系統(tǒng)的用例圖。1.Rational Rose介紹
Rational Rose是基于UML而產(chǎn)生的,是軟件開(kāi)發(fā)過(guò)程中的不可或缺的一個(gè)建模工具。
(1)Rational Rose的特點(diǎn):
? 支持多種語(yǔ)言,如Ada、CORBA、Visual Basic、Java等; ? 支持模型的Internet發(fā)布;
? 可以生成簡(jiǎn)單、清晰且定制靈活的文檔; ? 雙向工程保證了模型和代碼高度一致; ? 支持逆向工程,建立代碼框架; ? 支持多種關(guān)系型數(shù)據(jù)庫(kù)的建模;
? 從需求分析到測(cè)試,在整個(gè)軟件生命周期中,都為團(tuán)隊(duì)開(kāi)發(fā)提供強(qiáng)有力的支持。
(2)Rational Rose的作用
? 整個(gè)開(kāi)發(fā)團(tuán)隊(duì)可以使用用例圖,來(lái)獲得一個(gè)系統(tǒng)高層次的視圖,并且可以協(xié)商項(xiàng)目的范疇;
? 項(xiàng)目經(jīng)理可以使用用例圖和文檔,把項(xiàng)目分解成便于管理的多個(gè)模塊; ? 系統(tǒng)分析員和客戶(hù)在看到用例規(guī)格描述文檔的時(shí)候,就可以明白系統(tǒng)將會(huì)提供什么樣的功能;
? 技術(shù)編寫(xiě)者在看到用例規(guī)格描述文檔時(shí),就可以著手編寫(xiě)用戶(hù)手冊(cè)和培訓(xùn)計(jì)劃; ? 系統(tǒng)分析員和軟件開(kāi)發(fā)者在看到時(shí)序圖和協(xié)作圖時(shí),就可以明白整個(gè)系統(tǒng)的邏輯流程、對(duì)象以及對(duì)象之間的消息 2.安裝Rational Rose ①雙擊Rational Rose 2007的安裝程序,進(jìn)入安裝界面;按照系統(tǒng)提示一步一步完成系統(tǒng)的安裝。其中在選擇安裝產(chǎn)品時(shí),選擇“Rational Rose Enterprise Edition”;并且在設(shè)置創(chuàng)建程序位置時(shí),選擇創(chuàng)建一個(gè)本地的應(yīng)用程序而非網(wǎng)絡(luò)的,即選擇“Desktop installation from CD”。
②安裝成功,進(jìn)入Rational Rose界面,如圖1-1所示。
圖1-1 Rational Rose打開(kāi)界面
3.Rational Rose界面介紹
圖1-2 Rational Rose窗口
(1)Browser窗口: 瀏覽器窗口,用于快速啟動(dòng)模型;
(2)Documentation窗口:文檔窗口,用于快速訪(fǎng)問(wèn)通用命令;(3)Diagram窗口:編輯區(qū),用于顯示和編輯多個(gè)UML圖;(4)日志窗口:用于觀看錯(cuò)誤和各種各樣命令的結(jié)果報(bào)告;(5)工具欄窗口:顯示有關(guān)工具圖標(biāo)。
其中繪制用例圖時(shí)的工具欄圖標(biāo)如圖1-3所示。
圖1-3 工具欄
(1)selection tool 選擇工具(2)text box 文本框(3)note 注釋
(4)anchor note to item 用錨把項(xiàng)目與注釋鏈接在一起(5)package 包(6)use case 用例(7)actor 角色
(8)unidirectional association 單項(xiàng)鏈接(9)dependency or instantiates 依賴(lài)或?qū)嵗?10)generalization 泛化 4.Rose創(chuàng)建模型
Rose創(chuàng)建的模型文件后綴名為.mdl,模型的創(chuàng)建的一般步驟:(1)創(chuàng)建模型
點(diǎn)擊菜單欄中【File】項(xiàng),選擇【New】選項(xiàng),或者直接點(diǎn)擊標(biāo)準(zhǔn)菜單欄中的【Create New Model or File】按鈕;彈出如圖1-4所示的對(duì)話(huà)框,選擇要用到的框架,單擊【OK】按鈕,或者【Cancel】按鈕。
圖1-4 框架選擇對(duì)話(huà)框
(2)保存模型
保存模型是創(chuàng)建模型的逆過(guò)程,點(diǎn)擊菜單欄中【File】項(xiàng),選擇【Save】選項(xiàng),或者直接點(diǎn)擊標(biāo)準(zhǔn)菜單欄中的【Save Model,File,or Script】按鈕;(3)發(fā)布模型
點(diǎn)擊菜單欄中的【Tools】項(xiàng),選擇【W(wǎng)eb Publisher...】項(xiàng),跳出如圖1-5所示對(duì)話(huà)框;
在圖1-5中,選擇要發(fā)布到web頁(yè)面上的內(nèi)容和HTML頁(yè)面要保存的位置,單擊【Publish】按鈕,Rose模型就發(fā)布到web頁(yè)面上,打開(kāi)所保存的.html文件,就可以看到Rose模型。
圖1-5 rose web publish 5.使用Rational Rose繪制用例圖 創(chuàng)建用例圖
(1)選定瀏覽器窗口中的【Use Case View】;(2)單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇【New】;(3)在菜單【New】產(chǎn)生的下級(jí)菜單中選擇要新建的圖——【Use Case Diagram】。
6.創(chuàng)建參與者、用例
參與者、用例、以及兩者的關(guān)系,是用例圖的主要組成元素。下面有兩種方式創(chuàng)建用例圖所需的元素:
(1)單擊編輯區(qū)工具欄的圖標(biāo),然后在編輯區(qū)單擊鼠標(biāo)左鍵;
(2)在瀏覽器窗口中創(chuàng)建所需要的元素,將瀏覽器中的元素拖動(dòng)編輯區(qū)。7.建立用例規(guī)約(Use Case Specification)在選擇要設(shè)計(jì)用例規(guī)約的用例單擊鼠標(biāo)右鍵,選擇菜單【Open Specification...】,從而打開(kāi)如圖1-6所示對(duì)話(huà)框。用戶(hù)可以在用例屬性設(shè)置標(biāo)簽中對(duì)一些屬性進(jìn)行設(shè)置。
Name(名稱(chēng)):設(shè)置用例的名稱(chēng); Stereotype(類(lèi)型):用例的類(lèi)型; Rank(級(jí)別):對(duì)用例進(jìn)行層次劃分; 在圖1-6所示的用例屬性設(shè)置窗口中,我們通常將用例規(guī)約寫(xiě)在【Documentation】對(duì)象窗口中。
圖1-6 用例屬性設(shè)置
3.實(shí)驗(yàn)要求及代碼
圖1 圖書(shū)管理系統(tǒng)的用例圖
圖2 借書(shū)過(guò)程的活動(dòng)圖
圖3 還書(shū)過(guò)程的活動(dòng)圖
4.實(shí)驗(yàn)總結(jié)
(1)經(jīng)過(guò)這次實(shí)驗(yàn),我了解了Rational Rose的安裝和模型的創(chuàng)建。(2)使用UML進(jìn)行需求分析,及所要完成系統(tǒng)的功能需求,性能需求,接口需求等。
(3)學(xué)會(huì)了使用Rational Rose 或其它軟件工程工具繪制用例圖和活動(dòng)圖等。
第二篇:電子商務(wù)試驗(yàn)報(bào)告
四、實(shí)驗(yàn)思考
1、請(qǐng)描述你在該小組實(shí)驗(yàn)中都完成了哪些任務(wù)?
答:查看商城用戶(hù)訂單詳細(xì)信息,生成已確認(rèn)付款訂單,生成已確認(rèn)缺貨采購(gòu)單,生成已確認(rèn)預(yù)警商品采購(gòu)單,生成已確認(rèn)正常商品采購(gòu)單,銀行進(jìn)出帳管理(存),銀行進(jìn)出帳管理(取),銷(xiāo)售收入報(bào)表查詢(xún),采購(gòu)支付報(bào)表查詢(xún),銀行進(jìn)出報(bào)表查詢(xún)。
2、說(shuō)說(shuō)你對(duì)B to C電子商務(wù)運(yùn)作流程的認(rèn)識(shí)。
答:B to C模式是一種電子化零售,主要采取在線(xiàn)銷(xiāo)售形式,以網(wǎng)絡(luò)手段實(shí)現(xiàn)公眾消費(fèi)或向公眾提供服務(wù),并保證與其相關(guān)的付款方式的電子化。其主要的流程有:A.初始信息設(shè)置
商城管理員(添加商城信息、添加商品種類(lèi)、添加商品信息、開(kāi)通物流公司)物流用戶(hù)(物流公司申報(bào))
B.購(gòu)買(mǎi)流程
商城用戶(hù)(注冊(cè)、登錄、采購(gòu))———銷(xiāo)售部———財(cái)務(wù)部(受理訂單、進(jìn)EDI填開(kāi)發(fā)票)———銷(xiāo)售部(確認(rèn)單據(jù)、生成發(fā)貨單)———儲(chǔ)運(yùn)部(發(fā)貨)———物流業(yè)務(wù)部(配送)———商城用戶(hù)(收貨)
2.退貨流程
商城用戶(hù)(登錄、查看訂單、退貨)———銷(xiāo)售部(同意/不同意退貨)———商城用戶(hù)(查看訂單處理情況)
3.正常采購(gòu)
采購(gòu)部(提交正常采購(gòu)單)———財(cái)務(wù)部(審核)———采購(gòu)部(確認(rèn)采購(gòu)單)———物流業(yè)務(wù)部(配送)———儲(chǔ)運(yùn)部(產(chǎn)品入庫(kù))
4.預(yù)警采購(gòu)
采購(gòu)部(提交預(yù)警采購(gòu)單)———財(cái)務(wù)部(審核)———采購(gòu)部(確認(rèn)采購(gòu))———物流業(yè)務(wù)部(配送)———儲(chǔ)運(yùn)部(產(chǎn)品入庫(kù))
5.缺貨采購(gòu)
商城用戶(hù)(注冊(cè)、登錄、采購(gòu))———銷(xiāo)售部(受理生成缺貨單)———采購(gòu)部(生成缺貨采購(gòu)單)———財(cái)務(wù)部(通過(guò)缺貨采購(gòu)單)———采購(gòu)部(確認(rèn)缺貨采購(gòu))———物流部(缺貨商品配送)———儲(chǔ)運(yùn)部(缺貨單入庫(kù))———銷(xiāo)售部(生成財(cái)務(wù)單)———財(cái)務(wù)部(確認(rèn)付款單)———銷(xiāo)售部(生成出運(yùn)單)———儲(chǔ)運(yùn)部(配送產(chǎn)品)———商城用戶(hù)(收貨)
第三篇:機(jī)械設(shè)計(jì)試驗(yàn)報(bào)告
請(qǐng)分別用三張實(shí)驗(yàn)報(bào)告紙抄寫(xiě)!第10周周五交到各班學(xué)習(xí)委員,過(guò)期不侯!另將軸系結(jié)構(gòu)圖一并交上,每人一份,圖
上要標(biāo)明尺寸!
請(qǐng)學(xué)習(xí)委員將實(shí)驗(yàn)報(bào)告按學(xué)號(hào)排好交給我!
實(shí)驗(yàn)一機(jī)械零件認(rèn)識(shí)實(shí)驗(yàn)
一、實(shí)驗(yàn)?zāi)康?.初步了解《機(jī)械設(shè)計(jì)》課程所研究的各種常用零件的結(jié)構(gòu)、類(lèi)型、特點(diǎn)及應(yīng)用。
2.了解各種標(biāo)準(zhǔn)零件的結(jié)構(gòu)形式及相關(guān)的國(guó)家標(biāo)準(zhǔn)。
3.了解各種傳動(dòng)的特點(diǎn)及應(yīng)用。
4.了解各種常用的潤(rùn)滑劑及相關(guān)的國(guó)家標(biāo)準(zhǔn)。
5.增強(qiáng)對(duì)各種零部的結(jié)構(gòu)及機(jī)器的感性認(rèn)識(shí)。
二、實(shí)驗(yàn)方法
通過(guò)對(duì)實(shí)驗(yàn)指導(dǎo)書(shū)的學(xué)習(xí)及機(jī)械零件模型的展示,實(shí)驗(yàn)教學(xué)人員的介紹,答疑及同學(xué)的觀察去認(rèn)識(shí)機(jī)器常用的基本零件,使理論與實(shí)際對(duì)應(yīng)起來(lái),從而增強(qiáng)同學(xué)對(duì)機(jī)械零件的感性認(rèn)識(shí)。并通過(guò)展示的機(jī)械設(shè)備、機(jī)器模型等,使學(xué)生們清楚知道機(jī)器的基本組成要素—機(jī)械零件。
三、實(shí)驗(yàn)內(nèi)容
(一)螺紋聯(lián)接
螺紋聯(lián)接是利用螺紋零件工作的,主要用作緊固零件?;疽笫潜WC聯(lián)接強(qiáng)度及聯(lián)接可靠性,同學(xué)們應(yīng)了解如下內(nèi)容:
1.螺紋的種類(lèi); 2.螺紋聯(lián)接的基本類(lèi)型;
3.螺紋聯(lián)接的防松;4.提高螺紋聯(lián)接強(qiáng)度的措施。
在掌握上述內(nèi)容,通過(guò)參觀螺紋聯(lián)接模型,同學(xué)應(yīng)區(qū)分出:①什么是普通螺紋、管螺紋、梯形螺紋和鋸齒螺紋;②能認(rèn)識(shí)什么是普通螺紋、雙頭螺紋、螺釘及緊定螺釘聯(lián)接;③能認(rèn)識(shí)摩擦防松與機(jī)械防松的零件;④了解聯(lián)接螺栓的光桿部分做得比較細(xì)的原因是什么等問(wèn)題。
(二)標(biāo)準(zhǔn)聯(lián)接零件
標(biāo)準(zhǔn)聯(lián)接零件一般是由專(zhuān)業(yè)企業(yè)按國(guó)標(biāo)(GB)成批生產(chǎn),供應(yīng)市場(chǎng)的零件。這類(lèi)零件的結(jié)構(gòu)形式和尺寸都已標(biāo)準(zhǔn)化,設(shè)計(jì)時(shí)可根據(jù)有關(guān)標(biāo)準(zhǔn)選用。通過(guò)實(shí)驗(yàn)學(xué)生們要能區(qū)分螺栓與螺釘;能了解各種標(biāo)準(zhǔn)化零件的結(jié)構(gòu)特點(diǎn),使用情況;了解各類(lèi)零件有那些標(biāo)準(zhǔn)代號(hào),以提高學(xué)生們對(duì)標(biāo)準(zhǔn)化意識(shí)。
1.螺栓; 2.螺釘;3.螺母;4.墊圈;5.擋圈。
(三)鍵、花鍵及銷(xiāo)聯(lián)接
1.鍵聯(lián)接;2.花鍵聯(lián)接;3.銷(xiāo)聯(lián)接
以上幾種聯(lián)接,通過(guò)展柜的參觀同學(xué)們要仔細(xì)觀察其結(jié)構(gòu),使用場(chǎng)合,并能
分清和認(rèn)識(shí)以上各類(lèi)零件。
(四)機(jī)械傳動(dòng)
機(jī)械傳動(dòng)有螺旋傳動(dòng)、帶傳動(dòng)、鏈傳動(dòng)、齒傳動(dòng)及蝸桿傳動(dòng)等。各種傳動(dòng)都有不同的特點(diǎn)和使用范圍,這些傳動(dòng)知識(shí)同學(xué)們?cè)趯W(xué)習(xí)“機(jī)械設(shè)計(jì)”課程中都有要詳細(xì)講授。在這里主要通過(guò)實(shí)物觀察,增加同學(xué)們對(duì)各種機(jī)械傳動(dòng)知識(shí)的感性認(rèn)識(shí),為今后理論學(xué)習(xí)及課程設(shè)計(jì)打下良好基礎(chǔ)。
1.螺旋傳動(dòng);2.帶傳動(dòng); 3.鏈傳動(dòng); 4.齒輪傳動(dòng); 5.蝸桿傳動(dòng)。
(五)軸系零、部件
1.軸承;2.軸
(六)彈簧
(七)潤(rùn)滑劑及密封
實(shí)驗(yàn)二軸系結(jié)構(gòu)分析
一、實(shí)驗(yàn)?zāi)康?.熟悉并掌握軸與軸上零件的結(jié)構(gòu)形狀及功用、工藝要求和裝配關(guān)系;
2.熟悉并掌握軸及軸上零件的定位與固定方法;
3.了解軸承的類(lèi)型、布置、安裝及調(diào)整方法,以及潤(rùn)滑和密封方式。
二、實(shí)驗(yàn)設(shè)備及工具
1. 組合式軸系結(jié)構(gòu)設(shè)計(jì)分析實(shí)驗(yàn)箱
該實(shí)驗(yàn)箱按照組合設(shè)計(jì)法,采用較少的零件,可以組合出盡可能多的軸系部件,以滿(mǎn)足實(shí)驗(yàn)的要求。實(shí)驗(yàn)箱內(nèi)有齒輪類(lèi)、軸類(lèi)、套筒類(lèi)、端蓋類(lèi)、支座類(lèi)、軸承類(lèi)及聯(lián)接件類(lèi)等8類(lèi)50多種零件,提供了可組成圓柱齒輪軸系、小圓錐齒輪軸系和蝸桿軸系三類(lèi)軸系結(jié)構(gòu)模型的成套零件。
2. 測(cè)量及繪圖工具
300mm鋼板尺、游標(biāo)卡尺、鉛筆、三角板等。
三、實(shí)驗(yàn)內(nèi)容及要求
1.依據(jù)指導(dǎo)教師給每組指定實(shí)驗(yàn)內(nèi)容(圓柱齒輪軸系、小圓錐齒輪軸系或蝸桿軸系)觀察組裝后的軸系結(jié)構(gòu),繪制軸系部件的裝配草圖。
2.測(cè)量軸系的主要裝配尺寸,分析并測(cè)繪軸系零件,繪制主要零件的結(jié)構(gòu)草圖。
四、實(shí)驗(yàn)步驟
1.提前預(yù)習(xí),明確實(shí)驗(yàn)內(nèi)容,復(fù)習(xí)軸的結(jié)構(gòu)設(shè)計(jì)及軸承組合設(shè)計(jì)等與實(shí)驗(yàn)相關(guān)的教學(xué)內(nèi)容;
2.觀察與分析軸系結(jié)構(gòu)的特點(diǎn),繪制軸系裝配示意圖或結(jié)構(gòu)草圖;
3. 測(cè)量軸系主要裝配尺寸(如支承跨距);
4. 對(duì)軸系部件進(jìn)行拆解,觀察和分析軸系各零件的結(jié)構(gòu),對(duì)其主要的結(jié)構(gòu)尺寸進(jìn)行測(cè)量(支座不用測(cè)量)。
5. 根據(jù)裝配草圖和測(cè)量數(shù)據(jù),繪制軸系部件裝配圖。
6.裝配軸系部件使其恢復(fù)原狀。
實(shí)驗(yàn)三軸系結(jié)構(gòu)設(shè)計(jì)
一、實(shí)驗(yàn)?zāi)康氖煜げ⒄莆蛰S系結(jié)構(gòu)設(shè)計(jì)中有關(guān)軸的結(jié)構(gòu)設(shè)計(jì)、滾動(dòng)軸承組合設(shè)計(jì)的基本方法。
二、實(shí)驗(yàn)設(shè)備及工具
1. 組合式軸系結(jié)構(gòu)設(shè)計(jì)分析實(shí)驗(yàn)箱
實(shí)驗(yàn)箱提供了可組成減速器圓柱齒輪軸系、小圓錐齒輪軸系和蝸桿軸系三類(lèi)軸系結(jié)構(gòu)模型的成套零件(詳見(jiàn)實(shí)驗(yàn)中的設(shè)備介紹)。
2.測(cè)量及繪圖工具
300mm鋼板尺、游標(biāo)卡尺、鉛筆、三角板等。
三、實(shí)驗(yàn)內(nèi)容及要求
1、進(jìn)行軸的結(jié)構(gòu)設(shè)計(jì)與滾動(dòng)軸承組合設(shè)計(jì)
每組學(xué)生進(jìn)行軸系結(jié)構(gòu)設(shè)計(jì),解決軸承類(lèi)型選擇,軸上零件定位、固定,軸承安裝與調(diào)節(jié)、潤(rùn)滑及密封等問(wèn)題。
2.繪制軸系結(jié)構(gòu)裝配圖。
3.每人編寫(xiě)實(shí)驗(yàn)報(bào)告一份。
四、實(shí)驗(yàn)步驟
1.明確實(shí)驗(yàn)內(nèi)容,理解設(shè)計(jì)要求;
2.復(fù)習(xí)有關(guān)軸的結(jié)構(gòu)設(shè)計(jì)與軸承組合設(shè)計(jì)的內(nèi)容與方法;
3.構(gòu)思軸系結(jié)構(gòu)方案
1)根據(jù)齒輪類(lèi)型選擇滾動(dòng)軸承型號(hào);
2)確定支承軸向固定方式(兩端固定:一端固定、一端游動(dòng));
3)根據(jù)齒輪圓周速度(高、中、低)確定軸承潤(rùn)滑方式(脂潤(rùn)滑、油潤(rùn)滑);
4)選擇端蓋形式(凸緣式、嵌入式)并考慮透蓋處密封方式(氈圈、皮碗、油溝);
5)考慮軸上零件的定位與固定,軸承間隙調(diào)整等問(wèn)題;
6)繪制軸系結(jié)構(gòu)方案示意圖
4.組裝軸系部件
根據(jù)軸系結(jié)構(gòu)方案,從實(shí)驗(yàn)箱中選取合適零件并組裝成軸系部件,檢查所設(shè)計(jì)組裝的軸系結(jié)構(gòu)是否正確。
5.繪制軸系結(jié)構(gòu)草圖。
6.測(cè)量零件結(jié)構(gòu)尺寸(支座不用測(cè)量),并作好記錄。
7.將所有零件放人實(shí)驗(yàn)箱內(nèi)的規(guī)定位置,交還所借工具
8.根據(jù)結(jié)構(gòu)草圖及測(cè)量數(shù)據(jù),在3號(hào)圖紙上用1:l比例繪制軸系結(jié)構(gòu)裝配圖,要求裝配關(guān)系表達(dá)正確,注明必要尺寸(如支承跨距、齒輪直徑與寬度、主要配合尺寸),填寫(xiě)標(biāo)題欄和明細(xì)表。
9.寫(xiě)出實(shí)驗(yàn)報(bào)告。
第四篇:數(shù)據(jù)結(jié)構(gòu)試驗(yàn)報(bào)告
實(shí)驗(yàn)一:ADT的類(lèi)C描述向C程序的轉(zhuǎn)換實(shí)驗(yàn)(2學(xué)時(shí))
實(shí)驗(yàn)?zāi)康模?/p>
(1)復(fù)習(xí)C語(yǔ)言的基本用法;
(2)學(xué)會(huì)用類(lèi)C的語(yǔ)言對(duì)算法進(jìn)行描述的方法,將類(lèi)C算法轉(zhuǎn)換成C源程序的方法和過(guò)程;
(3)抽象數(shù)據(jù)類(lèi)型的定義和表示、實(shí)現(xiàn);
(4)加深對(duì)數(shù)據(jù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)之間關(guān)系的理解;(5)初步建立起時(shí)間復(fù)雜度和空間復(fù)雜度的概念。實(shí)驗(yàn)內(nèi)容:(類(lèi)C算法的程序?qū)崿F(xiàn))(1)輸入一組數(shù)據(jù)存入數(shù)組中,并將數(shù)據(jù)元素的個(gè)數(shù)動(dòng)態(tài)地由輸入函數(shù)完成。求輸入數(shù)據(jù)的最大值、最小值,并通過(guò)函數(shù)參數(shù)返回所求結(jié)果; 實(shí)驗(yàn)準(zhǔn)備:
1)計(jì)算機(jī)設(shè)備;2)程序調(diào)試環(huán)境的準(zhǔn)備,如TC環(huán)境;3)實(shí)驗(yàn)內(nèi)容的算法分析與代碼設(shè)計(jì)與分析準(zhǔn)備。實(shí)驗(yàn)步驟:
1.安裝TC并設(shè)置好環(huán)境,如果已安裝好,可以跳過(guò)此步; 2.錄入程序代碼并進(jìn)行調(diào)試和算法分析;
對(duì)實(shí)驗(yàn)內(nèi)容(1)的操作步驟:1)用類(lèi)C語(yǔ)言描述算法過(guò)程;2)用C語(yǔ)言環(huán)境實(shí)現(xiàn)該算法。
對(duì)實(shí)驗(yàn)內(nèi)容(2)的操作步驟:1)完成算法的C實(shí)現(xiàn);2)分析其時(shí)間復(fù)雜度和空間復(fù)雜度。
3.編寫(xiě)實(shí)驗(yàn)報(bào)告。
實(shí)驗(yàn)結(jié)果:// 動(dòng)態(tài)分配數(shù)組空間 #include
int size,i;int *pArray;int *p;void malloc_size(){ pArray=(int *)malloc(size*(sizeof(int)));}
int input_size(){ printf(“please input the size:n”);printf(“size= ”);scanf(“%d”,&size);return 0;}
int input_data(){ printf(“please input the value:n”);for(i=0;i printf(“pArray[%d]= ”,i); scanf(“%d”,&pArray[i]);} return *pArray;} int Compare(){ int x,y,i;x=y=p[0];for(i=0;i if(x>=p[i])x=p[i]; if(y<=p[i])y=p[i];} printf(“min= %dt max=%dn”,x,y);return 0;} int Output_data(){ p=pArray;printf(“before ofpaixu :n”);for(i=0;i printf(“%dt”,*pArray); pArray++;} printf(“n”);return *pArray;} void paixu(){ int x=0;int i,j;printf(“l(fā)ater of paixu:n”);for(i=0;i for(j=i+1;j { if(p[i]>=p[j]) { x=p[i];p[i]=p[j];p[j]=x; } } printf(“%dt”,p[i]);} printf(“n”);} void main(){ clrscr();input_size();malloc_size();input_data();Output_data();Compare();paixu();} 實(shí)驗(yàn)結(jié)果: 實(shí)驗(yàn)二 線(xiàn)性表及其基本操作實(shí)驗(yàn)(2學(xué)時(shí))實(shí)驗(yàn)?zāi)康模?/p> (1)熟練掌握線(xiàn)性表ADT和相關(guān)算法描述、基本程序?qū)崿F(xiàn)結(jié)構(gòu);(2)以線(xiàn)性表的基本操作為基礎(chǔ)實(shí)現(xiàn)相應(yīng)的程序; (3)掌握線(xiàn)性表的順序存儲(chǔ)結(jié)構(gòu)和動(dòng)態(tài)存儲(chǔ)結(jié)構(gòu)之區(qū)分。 實(shí)驗(yàn)內(nèi)容:(類(lèi)C算法的程序?qū)崿F(xiàn),任選其一。具體要求參見(jiàn)教學(xué)實(shí)驗(yàn)大綱)(1)一元多項(xiàng)式運(yùn)算的C語(yǔ)言程序?qū)崿F(xiàn)(加法必做,其它選做);(2)有序表的合并;(3)集合的并、交、補(bǔ)運(yùn)算; 實(shí)驗(yàn)準(zhǔn)備: 1)計(jì)算機(jī)設(shè)備;2)程序調(diào)試環(huán)境的準(zhǔn)備,如TC環(huán)境;3)實(shí)驗(yàn)內(nèi)容的算法分析與代碼設(shè)計(jì)與分析準(zhǔn)備。實(shí)驗(yàn)步驟: 1.錄入程序代碼并進(jìn)行調(diào)試和算法分析; 2.編寫(xiě)實(shí)驗(yàn)報(bào)告。實(shí)驗(yàn)結(jié)果://線(xiàn)性鏈表 #include typedef struct node { int data;struct node *next;}*Sqlist; void Initlialize(Sqlist &L){ L=(Sqlist)malloc(sizeof(Sqlist));L->next =NULL;} int Getlength(Sqlist L){ int i=0;Sqlist p=L->next;while(p!=NULL){ i++; p=p->next;} return i;} int Getelem(Sqlist L,int i){ int j=1,e;Sqlist p=L->next;while(j p=p->next; j++;} e=p->data;printf(“第 %d 個(gè)元素是:%dn”,i,e);return 1;} int Locatelem(Sqlist L,int x){ int i=0;Sqlist p=L->next;while(p!=NULL&&p->data!=x){ p=p->next; i++;} if(p==NULL) return 0;else { printf(“%d 是第 %d 個(gè)元素n”,x,i);return i;} } void CreatlistF(Sqlist &L,int a[ ],int n){ Sqlist s;int i;L=(Sqlist)malloc(sizeof(Sqlist));L->next =NULL;for(i=0;i s=(Sqlist)malloc(sizeof(Sqlist)); } } void CreatlistR(Sqlist &L,int a[],int n){ Sqlist s,r;int i;L=(Sqlist)malloc(sizeof(Sqlist));L->next =NULL;r=L;for(i=0;i s=(Sqlist)malloc(sizeof(Sqlist)); s->data =a[i]; s->next=NULL; r->next =s;r =s;} } int Inselem(Sqlist &L,int i,int x){ int j=1;Sqlist s,p=L->next;s=(Sqlist)malloc(sizeof(Sqlist));s->data =x;s->next =NULL;if(i<1||i>Getlength(L)) return 0;while(j p=p->next;j++;} printf(“在第 %d 個(gè)位置插入數(shù)據(jù):%dn”,i,x);s->next =p->next; p->next =s;return 1;} int Delelem(Sqlist &L,int i){ int j=1; Sqlist p,q; p=L; if(i<1||i>Getlength(L)) return 0;s->data =a[i]; s->next =L->next;L->next =s; while(j { p=p->next; j++; } q=p->next; p->next =q->next; free(q); return 1;} void Displist(Sqlist L){ Sqlist p=L->next; while(p!=NULL) { printf(“%dt”,p->data); p=p->next; } printf(“n”);} void input(int *pArray,int n){ printf(“請(qǐng)輸入數(shù)組數(shù)據(jù)(共含 %d 個(gè)元):n”,n); for(int i=0;i Scanf(“%d”,&pArray[i]); } int main(int argc, char* argv[]){ Sqlist L; int Array[M],Select;initlialize(L);do{ printf(“請(qǐng)輸入選擇方法(1表示頭插法,2表示尾插法,0表示結(jié)束):n”); scanf(“%d”,&Select); switch(Select) { case 1: printf(“按頭插法建立線(xiàn)性表:n”); input(Array,M); creatlistF(L,Array,M); break;case 2: printf(“按尾插法建立線(xiàn)性表:n”); input(Array,M); creatlistR(L,Array,M); break; } printf(“原線(xiàn)性表數(shù)據(jù)為:n”);Displist(L); Getelem(L,3); Locatelem(L,2); Inselem(L,5,5); printf(“修改后的線(xiàn)性表數(shù)據(jù)為:n”); Delelem(L,4); Displist(L);}while(Select!=0);return 0;} 運(yùn)行結(jié)果: 實(shí)驗(yàn)三 棧和隊(duì)列實(shí)驗(yàn)(6學(xué)時(shí))實(shí)驗(yàn)?zāi)康模?/p> (1)熟練掌握棧和隊(duì)列的抽象數(shù)據(jù)類(lèi)型及其結(jié)構(gòu)特點(diǎn);(2)實(shí)現(xiàn)基本的棧和隊(duì)列的基本操作算法程序。實(shí)驗(yàn)內(nèi)容:(類(lèi)C算法的程序?qū)崿F(xiàn),任選其一)(1)設(shè)計(jì)與實(shí)現(xiàn)基本的堆棧和隊(duì)列結(jié)構(gòu)下的各種操作(如堆棧的PUSH、POP等操作)(必做); (2)以表達(dá)式計(jì)算為例,完成一個(gè)可以進(jìn)行算術(shù)表達(dá)式計(jì)算功能的算法設(shè)計(jì)與實(shí)現(xiàn)(選做); 實(shí)驗(yàn)準(zhǔn)備: 1)計(jì)算機(jī)設(shè)備;2)程序調(diào)試環(huán)境的準(zhǔn)備,如TC環(huán)境;3)實(shí)驗(yàn)內(nèi)容的算法分析與代碼設(shè)計(jì)與分析準(zhǔn)備。實(shí)驗(yàn)步驟: 1.錄入程序代碼并進(jìn)行調(diào)試和算法分析; 2.編寫(xiě)實(shí)驗(yàn)報(bào)告。實(shí)驗(yàn)結(jié)果://隊(duì)列存儲(chǔ) #include typedef struct sqqueue { char data[QueueSize];int front,rear;}SqQueue; void InitQueue(SqQueue &qu){ qu.front =qu.rear =0;} status EnQueue(SqQueue &qu,char x){ if((qu.rear +1)%QueueSize==qu.front) return 0;qu.rear =(qu.rear+1)%QueueSize;qu.data[qu.rear]=x;return 1;} status DeQueue(SqQueue &qu,char &x){ if(qu.rear==qu.front) return 0;qu.front =(qu.front +1)%QueueSize;x=qu.data[qu.front];return 1;} status GetHead(SqQueue qu,char &x){ if(qu.rear ==qu.front) return 0;x=qu.data[(qu.front+1)%QueueSize];return 1;} status QueueEmpty(SqQueue qu){ if(qu.rear==qu.front) return 1;else return 0;} void main(){ SqQueue qu;char e;InitQueue(qu);printf(“Queue %sn”,(QueueEmpty(qu)==1?“Empty”:“Not Empty”)); printf(“inser an”); EnQueue(qu,'a'); printf(“inser bn”); EnQueue(qu,'b'); printf(“inser cn”); EnQueue(qu,'c'); printf(“inser dn”); EnQueue(qu,'d'); printf(“Queue %sn”,(QueueEmpty(qu)==1?“Empty”:“Not Empty”)); GetHead(qu,e); printf(“Queue of top elem is: %cn”,e); printf(“show of Queue:n”); while(!QueueEmpty(qu)){ DeQueue(qu,e); printf(“%ct”,e);} printf(“n”);} 實(shí)驗(yàn)結(jié)果: (2)//用棧實(shí)現(xiàn)對(duì)表達(dá)式的求值運(yùn)算 #include #define TRUE 1 #define FALSE 0 #define OK #define ERROR 0 #define INFEASIBLE-1 #define OVERFLOW-2 #define STACK_INIT_SIZE #define STACKINCREMENT 10 typedef int Status;typedef char ElemType; typedef ElemType OperandType; typedef char OperatorType; typedef struct { ElemType *base; ElemType *top; int stacksize;}SqStack; Status InitStack(SqStack &S){ S.base =(ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType)); if(!S.base)exit(OVERFLOW); S.top = S.base; S.stacksize = STACK_INIT_SIZE; return OK;} Status GetTop(SqStack S){ ElemType e; if(S.top == S.base)return ERROR; e = *(S.top-1); return e;} Status Push(SqStack &S,ElemType e) { if(S.top1 < n){ merge(r, r1, i, i+length-1, i + 2*length1 < n-1) merge(r, r1, i, i+length-1, n-1); else for(j = i;j < n;j++)r1[j] = r[j];} void MergeSort(SortObject * pvector){ RecordNode record[MAXNUM]; int length = 1; while(length < pvector->n){ mergePass(pvector->record, record, pvector->n, length); length *= 2; mergePass(record, pvector->record, pvector->n, length); length *= 2; } } SortObject vector = {8, 49,38,65,97,76,13,27,49}; int main(){ int i;printf(“排序前序列為:”); for(i = 0;i < 8;i++) printf(“%d ”, vector.record[i]);printf(“n”); MergeSort(&vector);printf(“采用歸并排序?yàn)椋骸?; for(i = 0;i < 8;i++) printf(“%d ”, vector.record[i]); getchar(); return 0;} 實(shí)驗(yàn)結(jié)果: 實(shí)驗(yàn)十 查找實(shí)驗(yàn)(2學(xué)時(shí))* 實(shí)驗(yàn)?zāi)康模?/p> (1)熟練掌握各種靜態(tài)查找表方法(順序查找、折半查找、索引順序表等);(2)熟練掌握二叉排序樹(shù)的構(gòu)造方法和查找算法; (3)了解和掌握其它查找方法。 實(shí)驗(yàn)內(nèi)容:(類(lèi)C算法的程序?qū)崿F(xiàn),除順序查找算法之外,任選一個(gè))(1)順序查找算法的實(shí)現(xiàn)(必做);(2)折半查找算法的實(shí)現(xiàn)(選做); 實(shí)驗(yàn)結(jié)果://查找實(shí)驗(yàn) 1、順序查找: #include void SequenceSearch(int *fp,int Length){ int data; printf(“開(kāi)始使用順序查詢(xún).請(qǐng)輸入你想要查找的數(shù)據(jù): ”); scanf(“%d”,&data); for(int i=0;i if(fp[i]==data) { printf(“數(shù)據(jù)%d 是第 %d 個(gè)數(shù)據(jù)n”,data,i+1); return; } printf(“未能查找到數(shù)據(jù)%d.n”,i,data);} void main(){ int count; int arr[LENGTH]; printf(“請(qǐng)輸入你的數(shù)據(jù)的個(gè)數(shù):”); scanf(“%d”,&count); printf(“請(qǐng)輸入 %d 個(gè)數(shù)據(jù):”,count); for(int i=0;i scanf(“%d”,&arr[i]); SequenceSearch(arr,count);} 實(shí)驗(yàn)結(jié)果: 2、折半查找: #include typedef struct { char *elem; int length; }SStable; void Create(char **t) { int i;static char a[M+1];*t=a;for(i=1;i<=M;i++){ printf(“A[%d] is:”,i); scanf(“%c”,&a[i]); if(a[i]!= 'n')getchar();} } int Searth(char *t,char k){ int i;for(i=M;i>=0 && t[i]!=k;i--); Return i;} void output(char *t){ int i;for(i=1;i<=M;i++) printf(“n A[%d] is %c”,i,t[i]);} void px(char *t) { char s;int i,j;for(i=1;i<=M;i++) for(j=i+1;j<=M;j++) { if(t[i]>t[j]){s=t[i];t[i]=t[j];t[j]=s;} } } int Search_bin(char *t,char k){ int low=1,high=M,mid;while(low<=high){ mid=(low+high)/2; if(k==t[mid])return mid; else if(k else low=mid+1;} return 0;} void main(){ char *t,k;int s;Create(&t);output(t);printf(“nplease input you search char:”);k=getchar();s=Searth(t,k);if(s>=0)printf(“1: use search find is A[%d]n”,s);else printf(“1:can not find itn”);px(t);output(t);s=Search_bin(t,k);if(s==0)printf(“n1:can not find it n”);else printf(“n2:use Search_bin find is A[%d]n”,s);getchar();} 實(shí)驗(yàn)結(jié)果: 操作系統(tǒng)課外實(shí)踐報(bào)告 項(xiàng) 目 名 稱(chēng): 磁盤(pán)調(diào)度模擬系統(tǒng) 所 在 班 級(jí): 軟件工程一班 小 組 成 員:;劉清元,學(xué)號(hào):120904012 指 導(dǎo) 教 師: 王蕾 起 止 時(shí) 間: 2014.6.1—2014.6.20 磁盤(pán)調(diào)度模擬系統(tǒng)實(shí)驗(yàn)報(bào)告 一:實(shí)驗(yàn)?zāi)繕?biāo): 通過(guò)設(shè)計(jì)一個(gè)磁盤(pán)調(diào)度模擬系統(tǒng),從而使磁盤(pán)調(diào)度算法更加形象化,容易使人理解,使磁盤(pán)調(diào)度的特點(diǎn)更簡(jiǎn)單明了,能使使用者加深對(duì)先來(lái)先服務(wù)算法、最短尋道時(shí)間優(yōu)先算法、掃描算法以及循環(huán)掃描算法等磁盤(pán)調(diào)度算法的理解。 二:實(shí)驗(yàn)要求: 系統(tǒng)主界面可以靈活選擇某種算法,算法包括:先來(lái)先服務(wù)算法(FCFS)、最短尋道時(shí)間優(yōu)先算法(SSTF)、掃描算法(SCAN)、循環(huán)掃描算法(CSCAN)。 三:實(shí)現(xiàn)原理 設(shè)備的動(dòng)態(tài)分配算法與進(jìn)程調(diào)度相似,也是基于一定的分配策略的。常用的分配策略有先請(qǐng)求先分配、優(yōu)先級(jí)高者先分配等策略。在多道程序系統(tǒng)中,低效率通常是由于磁盤(pán)類(lèi)旋轉(zhuǎn)設(shè)備使用不當(dāng)造成的。操作系統(tǒng)中,對(duì)磁盤(pán)的訪(fǎng)問(wèn)要求來(lái)自多方面,常常需要排隊(duì)。這時(shí),對(duì)眾多的訪(fǎng)問(wèn)要求按一定的次序響應(yīng),會(huì)直接影響磁盤(pán)的工作效率,進(jìn)而影響系統(tǒng)的性能。訪(fǎng)問(wèn)磁盤(pán)的時(shí)間因子由3部分構(gòu)成,它們是查找(查找磁道)時(shí)間、等待(旋轉(zhuǎn)等待扇區(qū))時(shí)間和數(shù)據(jù)傳輸時(shí)間,其中查找時(shí)間是決定因素。因此,磁盤(pán)調(diào)度算法先考慮優(yōu)化查找策略,需要時(shí)再優(yōu)化旋轉(zhuǎn)等待策略。 平均尋道長(zhǎng)度(L)為所有磁道所需移動(dòng)距離之和除以總的所需訪(fǎng)問(wèn)的磁道數(shù)(N),即: L=(M1+M2+??+Mi+??+MN)/N 其中Mi為所需訪(fǎng)問(wèn)的磁道號(hào)所需移動(dòng)的磁道數(shù)。 啟動(dòng)磁盤(pán)執(zhí)行輸入輸出操作時(shí),要把移動(dòng)臂移動(dòng)到指定的柱面,再等待指定扇區(qū)的旋轉(zhuǎn)到磁頭位置下,然后讓指定的磁頭進(jìn)行讀寫(xiě),完成信息傳送。因此,執(zhí)行一次輸入輸出所花的時(shí)間有: 尋找時(shí)間——磁頭在移動(dòng)臂帶動(dòng)下移動(dòng)到指定柱面所花的時(shí)間。 延遲時(shí)間——指定扇區(qū)旋轉(zhuǎn)到磁頭下所需的時(shí)間。 傳送時(shí)間——由磁頭進(jìn)程讀寫(xiě)完成信息傳送的時(shí)間。 其中傳送信息所花的時(shí)間,是在硬件設(shè)計(jì)就固定的。而尋找時(shí)間和延遲時(shí)間是與信息在磁盤(pán)上的位置有關(guān)。 為了減少移動(dòng)臂進(jìn)行移動(dòng)花費(fèi)的時(shí)間,每個(gè)文件的信息不是按盤(pán)面上的磁道順序存放滿(mǎn)一個(gè)盤(pán)面后,再放到下一個(gè)盤(pán)面上。而是按柱面存放,同一柱面上的各磁道被放滿(mǎn)信息后,再放到下一個(gè)柱面上。所以各磁盤(pán)的編號(hào)按柱面順序(從0號(hào)柱面開(kāi)始),每個(gè)柱面按磁道順序,每個(gè)磁道又按扇區(qū)順序進(jìn)行排序。 四:算法實(shí)現(xiàn) 1.先來(lái)先服務(wù)算法(FCFS) 先來(lái)先服務(wù)(FCFS)調(diào)度:按先來(lái)后到次序服務(wù),未作優(yōu)化。最簡(jiǎn)單的移臂調(diào)度算法是“先來(lái)先服務(wù)”調(diào)度算法,這個(gè)算法實(shí)際上不考慮訪(fǎng)問(wèn)者要求訪(fǎng)問(wèn)的物理位置,而只是考慮訪(fǎng)問(wèn)者提出訪(fǎng)問(wèn)請(qǐng)求的先后次序。例如,如果現(xiàn)在讀寫(xiě)磁頭正在50號(hào)柱面上執(zhí)行輸出操作,而等待訪(fǎng)問(wèn)者依次要訪(fǎng)問(wèn)的柱面為130、199、32、159、15、148、61、99,那么,當(dāng)50號(hào)柱面上的操作結(jié)束后,移動(dòng)臂將按請(qǐng)求的先后次序先移到130號(hào)柱面,最后到達(dá)99號(hào)柱面。采用先來(lái)先服務(wù)算法決定等待訪(fǎng)問(wèn)者執(zhí)行輸入輸出操作的次序時(shí),移動(dòng)臂來(lái)回地移動(dòng)。先來(lái)先服務(wù)算法花費(fèi)的尋找時(shí)間較長(zhǎng),所以執(zhí)行輸入輸出操作的總時(shí)間也很長(zhǎng)。 2.短尋道時(shí)間優(yōu)先算法(SSTF) 最短尋找時(shí)間優(yōu)先調(diào)度算法總是從等待訪(fǎng)問(wèn)者中挑選尋找時(shí)間最短的那個(gè)請(qǐng)求先執(zhí)行的,而不管訪(fǎng)問(wèn)者到來(lái)的先后次序?,F(xiàn)在仍利用同一個(gè)例子來(lái)討論,現(xiàn)在當(dāng)50號(hào)柱面的操作結(jié)束后,應(yīng)該先處理61號(hào)柱面的請(qǐng)求,然后到達(dá)32號(hào)柱面執(zhí)行操作,隨后處理15號(hào)柱面請(qǐng)求,后繼操作的次序應(yīng)該是99、130、148、159、199。 采用最短尋找時(shí)間優(yōu)先算法決定等待訪(fǎng)問(wèn)者執(zhí)行操作的次序時(shí),讀寫(xiě)磁頭總共移動(dòng)了200多個(gè)柱面的距離,與先來(lái)先服務(wù)、算法比較,大幅度地減少了尋找時(shí)間,因而縮短了為各訪(fǎng)問(wèn)者請(qǐng)求服務(wù)的平均時(shí)間,也就提高了系統(tǒng)效率。但最短查找時(shí)間優(yōu)先(SSTF)調(diào)度,F(xiàn)CFS會(huì)引起讀寫(xiě)頭在盤(pán)面上的大范圍移動(dòng),SSTF查找距離磁頭最短(也就是查找時(shí)間最短)的請(qǐng)求作為下一次服務(wù)的對(duì)象。SSTF查找模式有高度局部化的傾向,會(huì)推遲一些請(qǐng)求的服務(wù),甚至引起無(wú)限拖延(又稱(chēng)饑餓)。 3.掃描算法(SCAN) SCAN 算法又稱(chēng)電梯調(diào)度算法。SCAN算法是磁頭前進(jìn)方向上的最短查找時(shí)間優(yōu)先算法,它排除了磁頭在盤(pán)面局部位置上的往復(fù)移動(dòng),SCAN算法在很大程度上消除了SSTF算法的不公平性,但仍有利于對(duì)中間磁道的請(qǐng)求。 “電梯調(diào)度”算法是從移動(dòng)臂當(dāng)前位置開(kāi)始沿著臂的移動(dòng)方向去選擇離當(dāng)前移動(dòng)臂最近的那個(gè)柱訪(fǎng)問(wèn)者,如果沿臂的移動(dòng)方向無(wú)請(qǐng)求訪(fǎng)問(wèn)時(shí),就改變臂的移動(dòng)方向再選擇。這好比乘電梯,如果電梯已向上運(yùn)動(dòng)到4層時(shí),依次有3位乘客陳生、伍生、張生在等候乘電梯。他們的要求是:陳生在2層等待去10層;伍生在5層等待去底層;張生在8層等待15層。由于電梯目前運(yùn)動(dòng)方向是向上,所以電梯的形成是先把乘客張生從8層帶到15層,然后電梯換成下行方向,把乘客伍生從5層帶到底層,電梯最后再調(diào)換方向,把乘客陳生從2層送到10層。 我們?nèi)杂们笆龅耐焕觼?lái)討論采用“電梯調(diào)度”算法的情況。由于磁盤(pán)移動(dòng)臂的初始方向有兩個(gè),而該算法是與移動(dòng)臂方向有關(guān),所以分成兩種情況來(lái)討論。 〈1〉.移動(dòng)臂由里向外移動(dòng) 開(kāi)始時(shí),在50號(hào)柱面執(zhí)行操作的讀寫(xiě)磁頭的移動(dòng)臂方向是由里向外,趨向32號(hào)柱面的位置,因此,當(dāng)訪(fǎng)問(wèn)50號(hào)柱面的操作結(jié)束后,沿臂移動(dòng)方向最近的柱面是32號(hào)柱面。所以應(yīng)先為32號(hào)柱面的訪(fǎng)問(wèn)者服務(wù),然后是為15號(hào)柱面的訪(fǎng)問(wèn)者服務(wù)。之后,由于在向外移方向已無(wú)訪(fǎng)問(wèn)等待者,故改變移動(dòng)臂的方向,由外向里依次為各訪(fǎng)問(wèn)者服務(wù)。在這種情況下為等待訪(fǎng)問(wèn)者服務(wù)的次序是61、99、130、148、159、199。 〈2〉.移動(dòng)臂由外向里移動(dòng) 開(kāi)始時(shí),正在50號(hào)柱面執(zhí)行操作的讀寫(xiě)磁頭的移動(dòng)臂是由外向里(即向柱面號(hào)增大的內(nèi)圈方向)趨向61號(hào)柱面的位置,因此,當(dāng)訪(fǎng)問(wèn)50號(hào)柱面的操作結(jié)束后,沿臂移動(dòng)方向最近的柱面是61號(hào)柱面。所以,應(yīng)先為61號(hào)柱面服務(wù),然后按移動(dòng)臂由外向里移動(dòng)的方向,依次為99、130、148、159、199柱面的訪(fǎng)問(wèn)者服務(wù)。當(dāng)201號(hào)柱面的操作結(jié)束后,向里移動(dòng)的方向已經(jīng)無(wú)訪(fǎng)問(wèn)等待者,所以改變移動(dòng)臂的前進(jìn)方向,由里向外依次為32、15柱面的訪(fǎng)問(wèn)者服務(wù)。 “電梯調(diào)度”與“最短尋找時(shí)間優(yōu)先”都是要盡量減少移動(dòng)臂時(shí)所花的時(shí)間。所不同的是:“最短尋找時(shí)間優(yōu)先”不考慮臂的移動(dòng)方向,總是選擇離當(dāng)前讀寫(xiě)磁頭最近的那個(gè)柱面,這種選擇可能導(dǎo)致移動(dòng)臂來(lái)回改變移動(dòng)方向;“電梯調(diào)度”是沿著臂的移動(dòng)方向去選擇離當(dāng)前讀寫(xiě)詞頭最近的哪個(gè)柱面的訪(fǎng)問(wèn)者,僅當(dāng)沿移動(dòng)臂的前進(jìn)移動(dòng)方向無(wú)訪(fǎng)問(wèn)等待者時(shí),才改變移動(dòng)臂的前進(jìn)方向。由于移動(dòng)臂改變方向是機(jī)械動(dòng)作,速度相對(duì)較慢,所以,電梯調(diào)度算法是一種簡(jiǎn)單、使用且高效的調(diào)度算法。 但是,“電梯調(diào)度”算法在實(shí)現(xiàn)時(shí),不僅要記住讀寫(xiě)磁頭的當(dāng)前位置,還必須記住移動(dòng)臂的當(dāng)前前進(jìn)方向。 4.循環(huán)掃描算法(CSCAN) 單項(xiàng)掃描調(diào)度算法的基本思想是,不考慮訪(fǎng)問(wèn)者等待的先后次序,總是從0號(hào)柱面開(kāi)始向里道掃描,按照各自所要訪(fǎng)問(wèn)的柱面位置的次序去選擇訪(fǎng)問(wèn)者。在移動(dòng)臂到達(dá)最后一個(gè)柱面后,立即快速返回到0號(hào)柱面,返回時(shí)不為任何的訪(fǎng)問(wèn)者等待服務(wù)。在返回到0號(hào)柱面后,再次進(jìn)行掃描。 由于該例中已假定讀寫(xiě)的當(dāng)前位置在50號(hào)柱面,所以,指示了從50號(hào)柱面繼續(xù)向里掃描,依次為61、99、130、148、159、199各柱面的訪(fǎng)問(wèn)者服務(wù),此時(shí)移動(dòng)臂已經(jīng)是最內(nèi)的柱面,于是立即返回到0號(hào)柱面,重新掃描,依次為15、32號(hào)柱面的訪(fǎng)問(wèn)者服務(wù)。 除了“先來(lái)先服務(wù)”調(diào)度算法外,其余三種調(diào)度算法都是根據(jù)欲訪(fǎng)問(wèn)的柱面位置來(lái)繼續(xù)調(diào)度的。在調(diào)度過(guò)程中可能有新的請(qǐng)求訪(fǎng)問(wèn)者加入。在這些新的請(qǐng)求訪(fǎng)問(wèn)者加入時(shí),如果讀寫(xiě)已經(jīng)超過(guò)了它們所要訪(fǎng)問(wèn)的柱面位置,則只能在以后的調(diào)度中被選擇執(zhí)行。在多道程序設(shè)計(jì)系統(tǒng)中,在等待訪(fǎng)問(wèn)磁盤(pán)的若干訪(fǎng)問(wèn)者請(qǐng)求中,可能要求訪(fǎng)問(wèn)的柱面號(hào)相同,但在同一柱面上的不同磁道,或訪(fǎng)問(wèn)同一柱面中同一磁道上的不同扇區(qū)。所以,在進(jìn)行移動(dòng)調(diào)度時(shí),在按照某種短法把移動(dòng)臂定位到某個(gè)柱面后,應(yīng)該在等待訪(fǎng)問(wèn)這個(gè)柱面的各個(gè)訪(fǎng)問(wèn)者的輸入輸出操作都完成之后,再改變移動(dòng)臂的位置。 五:實(shí)現(xiàn)代碼 #include printf(“第%d次訪(fǎng)問(wèn)的磁道:%dn”,i+1,a[i]); sum+=abs(s-a[i]); s=a[i];} printf(“平均尋道長(zhǎng)度:%fn”,sum*1.0/n);} void SSTF(int b[],int n,int k)//最短尋道法 { int i,j,s,sum=0,p;int a[20];for(i=0;i s=a[0]; p=0; for(j=0;j<=i;j++) if(abs(a[j]-k) { s=a[j]; p=j; } a[p]=a[i]; printf(“第%d次訪(fǎng)問(wèn)的磁道:%dn”,n-i,s); sum+=abs(s-k); k=s;} printf(“平均尋道長(zhǎng)度:%fn”,sum*1.0/n);} void SCAN1(int b[],int n,int k)//掃描算法 { int i,j,s,sum=0,p,biaoji;int a[20];for(i=0;i biaoji=0; for(j=0;j<=i;j++) if(a[j]-k<0) { biaoji=1; p=j; break; } if(biaoji==1) { s=a[p]; for(j=0;j<=i;j++) if(a[j] { s=a[j]; p=j; } a[p]=a[i]; printf(“第%d次訪(fǎng)問(wèn)的磁道:%dn”,n-i,s); sum+=k-s; k=s; } else { s=a[0]; for(j=0;j<=i;j++) if(a[j]-k<=s-k) { s=a[j]; p=j; } a[p]=a[i]; printf(“第%d次訪(fǎng)問(wèn)的磁道:%dn”,n-i,s); sum+=abs(k-s); k=s; } } printf(“平均尋道長(zhǎng)度:%fn”,sum*1.0/n);} void SCAN2(int b[],int n,int k)//循環(huán)算法 { int i,j,s,sum=0,p,biaoji;int a[20];for(i=0;i biaoji=0; for(j=0;j<=i;j++) if(a[j]-k>0) { biaoji=1; p=j; break; } if(biaoji==1) { s=a[p]; for(j=0;j<=i;j++) if(a[j]>k&&a[j]-k { s=a[j]; p=j; } a[p]=a[i]; printf(“第%d次訪(fǎng)問(wèn)的磁道:%dn”,n-i,s); sum+=s-k; k=s; } else { s=a[0]; for(j=0;j<=i;j++) if(k-a[j]<=k-s) { s=a[j]; p=j; } a[p]=a[i]; printf(“第%d次訪(fǎng)問(wèn)的磁道:%dn”,n-i,s); sum+=abs(k-s); k=s; } } printf(“平均尋道長(zhǎng)度:%fn”,sum*1.0/n);} void C_SCAN(int b[],int n,int k)//循環(huán)算法 { int i,j,s,sum=0,p,biaoji;int a[20];for(i=0;i biaoji=0; for(j=0;j<=i;j++) if(a[j]-k>0) { biaoji=1; p=j; break; } if(biaoji==1) } { s=a[p];for(j=0;j<=i;j++)if(a[j]>k&&a[j]-k for(;i>=0;i--){ s=a[0];for(j=0;j<=i;j++)if(a[j]-k { s=a[j]; p=j; } a[p]=a[i];printf(“第%d次訪(fǎng)問(wèn)的磁道:%dn”,n-i,s);sum+=s-k;k=s;} printf(“平均尋道長(zhǎng)度:%fn”,sum*1.0/n); void main(){ int a[20];int i,n,k,k1,init;printf(“請(qǐng)輸入需要訪(fǎng)問(wèn)的磁道總數(shù):”);scanf(“%d”,&n);for(i=0;i printf(“需要訪(fǎng)問(wèn)的磁道%d:”,i+1); scanf(“%d”,&a[i]);} printf(“請(qǐng)輸入指針?biāo)诖诺?”);scanf(“%d”,&init);k=1;while(k){ printf(“**********************************n”); printf(“$$$$$$$$$$劉清元——磁盤(pán)調(diào)度$$$$$$$$$n”); printf(“** 1.先來(lái)先服務(wù)(FCFS)**n”); printf(“** 2.最短尋道時(shí)間優(yōu)先(SSTF)**n”); printf(“** 3.掃描算法(SCAN)**n”); printf(“** 4.循環(huán)算法(C-SCAN)**n”); printf(“** 0.退出 **n”); printf(“**********************************n”); printf(“&&&&&&&&&&&&謝謝使用&&&&&&&&&&&&&&n”); printf(“請(qǐng)?jiān)谙旅孑斎肽倪x擇:”); scanf(“%d”,&k); switch(k) { case 1:FCFS(a,n,init);break; case 2:SSTF(a,n,init);break; case 3:k1=1; while(k1) { printf(“*********************************n”); printf(“ #劉清元——磁盤(pán)調(diào)度 ###n”); printf(“**** 1.移動(dòng)臂由里向外 **n”); printf(“**** 2.移動(dòng)臂由外向里 **n”); printf(“**** 0.返回上一層 **n”); printf(“*********************************n”); printf(“ ######謝謝使用 #####n”); printf(“請(qǐng)?jiān)谙旅孑斎肽倪x擇:”); } } } scanf(“%d”,&k1);switch(k1){ case 1:SCAN1(a,n,init);break;case 2:SCAN2(a,n,init);break;} } break;case 4:C_SCAN(a,n,init);break;六:運(yùn)行結(jié)果 1.輸入數(shù)據(jù),選擇調(diào)度方法 2.先來(lái)先服務(wù) 3最短尋道時(shí)間優(yōu)先 4循環(huán)算法 5.循環(huán)算法 (1)磁頭由里向外移動(dòng) (2)磁頭由外向里移動(dòng) 七:心得體會(huì) 通過(guò)此次課程設(shè)計(jì),我明白了實(shí)踐的意義,要把書(shū)本上的知識(shí)轉(zhuǎn)換為現(xiàn)實(shí)中的成果,創(chuàng)新與不懈的努力也是成功的重要因素。如果沒(méi)有一定的耐心,這次的課程設(shè)計(jì)也不能成功。 “磁盤(pán)調(diào)度”是我本學(xué)期操作系統(tǒng)課程設(shè)計(jì)的題目。在設(shè)計(jì)此程序的過(guò)程中,我遇到過(guò)許多問(wèn)題,也學(xué)到了很多東西。 本程序的設(shè)計(jì)實(shí)現(xiàn)主要是用C++語(yǔ)言實(shí)現(xiàn),通過(guò)對(duì)程序算法的設(shè)計(jì)優(yōu)化、輸出顯示的格式設(shè)計(jì)、輸入過(guò)程中的異常處理等一些設(shè)計(jì)過(guò)程中的問(wèn)題的考慮解決,在C++學(xué)習(xí)上也有了很大的進(jìn)步。 在程序設(shè)計(jì)中先后參考了很多網(wǎng)絡(luò)資料,也參考了一些別人寫(xiě)的的程序,綜合這些算法思想和自己的思路對(duì)程序做了很好的設(shè)計(jì)方式,對(duì)一些算法的優(yōu)越性等也作了一些考慮。此外考慮最多的就是異常錯(cuò)誤處理的設(shè)計(jì)。在設(shè)置程序的顯示優(yōu)化時(shí),發(fā)現(xiàn)暫停函數(shù)在不同的情況下執(zhí)行順序不同,如此等等第五篇:操作系統(tǒng)試驗(yàn)報(bào)告