2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  課 程 設 計 報 告</p><p>  課程名稱: 高級語言課程設計 </p><p>  課程代碼: </p><p>  設計內(nèi)容: 漢諾塔演示系統(tǒng) </p><p>  二0一二 年 12 月21日</p><

2、;p>  目 錄</p><p>  1.課程設計目的3</p><p>  1.1了解漢諾塔的基本原理3</p><p>  2.課程設計題目描述和要求3</p><p>  2.1課程設計題目3</p><p>  2.2課程設計要求3</p><p>  

3、3.課程設計報告內(nèi)容4</p><p><b>  3.1程序原理4</b></p><p><b>  3.2程序內(nèi)容5</b></p><p><b>  3.3算法設計7</b></p><p><b>  3.4程序調(diào)試7</b><

4、/p><p><b>  4.總結8</b></p><p><b>  一、課程設計目的</b></p><p>  1.1了解漢諾塔基本原理</p><p>  1、通過本實驗,掌握復雜性問題的分析方法,了解漢諾塔游戲的時間復雜性和空間復雜性。</p><p>  2、通過

5、本實驗,學習和了解mfc環(huán)境的應用。</p><p>  3、通過本實驗,對遞歸算法及進棧出棧操作進一步了解和應用。</p><p>  4、通過本實驗,將課堂學習的理論與實踐結合在一起。</p><p>  5、學會編制結構清晰、風格良好、數(shù)據(jù)結構適當?shù)模?+語言程序,從而具備解決綜合性實際問題的能力。</p><p>  2.課程設計題目

6、描述和要求</p><p>  2.1 課程設計描述</p><p>  1、在mfc界面中插入盤子,確定其初始狀態(tài)以及背景圖片。</p><p>  2、選擇盤子的數(shù)量,以自動搬移的方式移動。</p><p>  3、自動搬移可以通過定時器的方法,每一次移動的時間間隔可以通過修改程序中的代碼自定。</p><p> 

7、 4、定義塔的描述類和碟子的描述類。</p><p>  5、選定盤子數(shù)量點擊開始運行,點擊結束后退出程序。</p><p>  2.2 課程設計要求</p><p>  通過對高級程序語言設計學習,以及對mfc的自學過程,掌握對mfc可視化程序的設計,熟練運用老師所講的高級程序語言設計的知識,通過綜合運用先修課的知識,培養(yǎng)獨立分析和解決實際問題的能力。培養(yǎng)學生使用

8、高級語言開發(fā)系統(tǒng)的能力,提高學生分析、設計系統(tǒng)的能力。</p><p>  3.課程設計報告內(nèi)容</p><p><b>  3.1程序原理</b></p><p>  當在一個函數(shù)A的定義中出現(xiàn)調(diào)用函數(shù)A的情況時,或在A函數(shù)的定義過程中調(diào)用B函數(shù),而在B函數(shù)的定義過程中又調(diào)用了A函數(shù) ,這種調(diào)用關系稱為遞歸調(diào)用。在設計遞歸程序函數(shù)時,通常是先

9、判斷遞歸結束條件,再進行遞歸調(diào)用。其執(zhí)行過程比較復雜,都存在連續(xù)遞歸調(diào)用(參數(shù)入棧)和回推過程。在使用遞歸的方法設計程序時,在遞歸程序中一定要有遞歸結束條件;否則,在執(zhí)行程序時,會產(chǎn)生無窮無盡的遞歸調(diào)用。</p><p><b>  3.2程序內(nèi)容</b></p><p>  算法設計思想: </p><p>  (1)將塔A上的n-1

10、個碟子借助塔C先移到塔B上。 </p><p>  (2)把塔A上剩下的一個碟子移到塔C上。 </p><p>  (3)將n-1個碟子從塔B借助于塔A移到塔C上。</p><p><b>  實驗步驟: </b></p><p>  1. 用c++ 或c語言設計實現(xiàn)漢諾塔游戲;</p><p&

11、gt;  2. 讓盤子數(shù)從2 開始到7進行實驗,記錄程序運行時間和遞歸調(diào)用次數(shù); </p><p>  3. 畫出盤子數(shù)n和運行時間t 、遞歸調(diào)用次數(shù)m的關系然后對程序進行分析</p><p><b>  3.3 算法設計</b></p><p> ?。?)移動盤子在CMyDlg中建立成員函數(shù):</p><p><

12、b>  MoveDisk:</b></p><p>  int CMyDlg::MoveDish(int n, int a, int b) {</p><p>  if(1 == n){</p><p><b>  // 移動盤子</b></p><p>  int i = 1;</p>

13、<p>  for(; i <= number ; i++){</p><p>  if(a == dish[number - i]){</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b&g

14、t;</p><p>  if(i > number){</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  dish[number - i] = b;</p><p>  return 0; // 完成&

15、lt;/p><p><b>  }</b></p><p><b>  else{</b></p><p>  // 將要進行的操作進棧</p><p>  opt[pn][0] = n-1;</p><p>  opt[pn][1] = 3-a-b;</p>&l

16、t;p>  opt[pn][2] = b;</p><p><b>  pn ++;</b></p><p>  opt[pn][0] = 1;</p><p>  opt[pn][1] = a;</p><p>  opt[pn][2] = b;</p><p><b>  pn

17、 ++;</b></p><p>  opt[pn][0] = n-1;</p><p>  opt[pn][1] = a;</p><p>  opt[pn][2] = 3-a-b;</p><p><b>  pn ++;</b></p><p><b>  return

18、 1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  (2)建立選擇盤子以及盤子移動速度的成員函數(shù):</p><p>  OnButton1()</p><p>  void CMyDlg::OnBut

19、ton1() {</p><p><b>  // 開始演示</b></p><p>  if(0 == number){</p><p>  MessageBox("請選擇盤子數(shù)!");</p><p><b>  return ;</b></p><p&g

20、t;<b>  }</b></p><p>  SetDishNumber(number); // 數(shù)據(jù)重置</p><p>  MoveDish(number, 0, 2);</p><p>  SetTimer(1015, 400, NULL); // 開始計時,每400毫秒一步</p><p><b> 

21、 }</b></p><p> ?。?)對盤子進行設置:</p><p>  void CMyDlg::OnR3() {</p><p><b>  // 設置三個盤子</b></p><p>  SetDishNumber(3);</p><p><b>  }</b

22、></p><p>  void CMyDlg::OnR4() {</p><p><b>  // 設置四個盤子</b></p><p>  SetDishNumber(4);</p><p><b>  }</b></p><p>  void CMyDlg::On

23、R5() {</p><p><b>  // 設置五個盤子</b></p><p>  SetDishNumber(5);</p><p><b>  }</b></p><p>  void CMyDlg::OnR6() {</p><p><b>  // 設

24、置六個盤子</b></p><p>  SetDishNumber(6);</p><p><b>  }</b></p><p>  void CMyDlg::OnR7() {</p><p><b>  // 設置七個盤子</b></p><p>  SetD

25、ishNumber(7);</p><p><b>  }</b></p><p><b>  // 設置盤子個數(shù)</b></p><p>  void CMyDlg::SetDishNumber(int n){</p><p>  KillTimer(1015); // 停止計時</p>

26、;<p>  pn = 0; // 清空棧</p><p>  number = n;</p><p>  for(int i = 0; i < n ; i++){</p><p>  dish[i] = 0; // 初始化每個盤子都在第一根柱子上</p><p><b>  }</b></p&

27、gt;<p>  Invalidate(FALSE);//重繪</p><p><b>  }</b></p><p><b> ?。?)顯示背景</b></p><p>  void CMyDlg::ShowBg(CDC * dc){</p><p><b>  //顯示背

28、景</b></p><p>  CDC pdc, ddc;</p><p>  pdc.CreateCompatibleDC(dc); // 創(chuàng)建一個臨時顯示設備</p><p>  ddc.CreateCompatibleDC(dc); // 創(chuàng)建一個加載盤子的臨時顯示設備</p><p>  CBitmap bmp, * ob

29、mp;</p><p>  bmp.LoadBitmap(IDB_BG); // 加載背景圖片</p><p>  obmp = pdc.SelectObject(&bmp); // 將圖片顯示在設備pdc上。</p><p><b>  //顯示盤子</b></p><p>  int n[] = {0, 0,

30、 0}; // 用于存放每個柱子已顯示多少盤子</p><p>  for(int i = 0; i < number ; i++){</p><p>  CBitmap dbmp, * odbmp;</p><p>  dbmp.LoadBitmap(IDB_B7 - i); // 加載從大到小第i個盤子圖片</p><p>  od

31、bmp = ddc.SelectObject(&dbmp); // 將盤子顯示在設備ddc上。</p><p>  pdc.BitBlt(10 + 150*dish[i], 225 - n[dish[i]]*20, 140, 15, &ddc, 0, 0, SRCCOPY); // 將ddc拷貝到臨時顯示設備pdc對應位置上</p><p>  n[dish[i]] ++;

32、</p><p>  ddc.SelectObject(odbmp); // 顯示完畢,還原設備</p><p><b>  }</b></p><p>  dc->BitBlt(10, 10, 460, 260, &pdc, 0, 0, SRCCOPY); // 將pdc拷貝到程序顯示設備dc上</p><p

33、>  pdc.SelectObject(obmp); // 顯示完畢,還原設備</p><p><b>  }</b></p><p><b>  4.總結</b></p><p>  對于這次對漢諾塔程序演示的設計,因為是第一次接觸mfc可視化程序設計,多少有點棘手,在網(wǎng)上找了挺多關于這方面的演示程序進行參考,通過

34、對他們的程序進行分析理解,學習一些以前自己沒有學到的知識,最終將其變成自己的東西。</p><p>  在實際操作過程中出現(xiàn)了不少的錯誤,雖然犯了一些錯誤但是還會有意外的收獲感覺也挺有意思。畢竟這些錯誤在自己的各種尋找方法,網(wǎng)上查找資料,詢問老師同學等等,最終將問題解決,先不說結果怎樣,其中的過程就挺讓人回味的。當然,在具體操作中對這學期所學的數(shù)據(jù)結構的理論知識得到鞏固對高級程序語言設計的mfc可視化程序設計也有

35、了進一步的認識和提高,達到設計的基本目的也發(fā)現(xiàn)自己的不足之處在以后的上機中應更加注意。 通過對漢諾塔算法的分析讓我更清楚的認識到了不同的算法對程序性能的影響也讓我明白掌握了算法將會有助于提高軟件的開發(fā)。</p><p><b>  參考文獻:</b></p><p>  1辛長安,王顏國. Visual.C.權威剖析--MFC的原理、機制與開發(fā)實例.北京:清華大學

溫馨提示

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

評論

0/150

提交評論