版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 攀枝花學(xué)院課程設(shè)計(jì)</b></p><p> 題 目: 計(jì)算器 </p><p> 院 (系): 數(shù)學(xué)與計(jì)算機(jī)學(xué)院 </p><p> 年級(jí)專業(yè): 軟件工程1班 </p><p>
2、姓 名: 刁剛健 </p><p> 學(xué) 號(hào): 201510602008 </p><p> 指導(dǎo)教師: </p><p><b> 二〇一六年七月五日</b></p><p
3、><b> 攀枝花學(xué)院教務(wù)處制</b></p><p> 攀枝花學(xué)院本科學(xué)生課程設(shè)計(jì)任務(wù)書</p><p> 注:任務(wù)書由指導(dǎo)教師填寫。</p><p> 課程設(shè)計(jì)(論文)指導(dǎo)教師成績(jī)?cè)u(píng)定表</p><p><b> 摘 要</b></p><p><
4、b> 目 錄</b></p><p><b> 摘 要I</b></p><p><b> 1 需求分析1</b></p><p> 1.1 需求概述1</p><p> 1.2 需求環(huán)境1</p><p> 1.3 功能描述2&
5、lt;/p><p><b> 2 概要設(shè)計(jì)3</b></p><p> 2.1 程序功能模塊3</p><p> 2.2 程序流程圖3</p><p> 2.3 數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)4</p><p><b> 3 詳細(xì)設(shè)計(jì)5</b></p><
6、p> 3.1 程序初始化5</p><p> 3.1.1 代碼功能5</p><p> 3.1.2 功能實(shí)現(xiàn)代碼5</p><p> 3.2 盤塊的移動(dòng)過程5</p><p> 3.2.1代碼功能5</p><p> 3.2.2 功能實(shí)現(xiàn)代碼5</p><p>
7、3.3 遞歸函數(shù)6</p><p> 3.3.1 流程圖6</p><p> 3.3.2 功能實(shí)現(xiàn)代碼7</p><p><b> 4 測(cè)試與運(yùn)行8</b></p><p><b> 結(jié)束語9</b></p><p><b> 參考文獻(xiàn)10&l
8、t;/b></p><p><b> 1 需求分析</b></p><p><b> 1.1 需求概述</b></p><p> 漢諾塔演示程序設(shè)計(jì)是計(jì)算機(jī)圖形學(xué)中圖形變換的內(nèi)容之一。而圖形學(xué)中的圖形變換的概念是由簡(jiǎn)單圖形生成復(fù)雜圖形,可用二維圖形表示三維形體,甚至可以對(duì)靜態(tài)圖形經(jīng)過快速變換而獲得圖形的動(dòng)態(tài)顯
9、示效果。其任務(wù)是研究各點(diǎn)坐標(biāo)之間的變化規(guī)律。而本次課程設(shè)計(jì)就是利用C語言以及圖形函數(shù)實(shí)現(xiàn)漢諾塔的遞歸算法來進(jìn)行其盤塊移動(dòng)的全過程顯示。在TC環(huán)境中要實(shí)現(xiàn)這樣的功能,就要牽涉到圖形設(shè)備接口的知識(shí)。Windows圖形設(shè)備接口是為與設(shè)備無關(guān)的圖形設(shè)計(jì)的,是Windows系統(tǒng)的重要組成部分,負(fù)責(zé)系統(tǒng)與用戶或繪圖程序之間的信息交換,并控制在輸出設(shè)備上顯示圖形或文字。應(yīng)用程序必須通知圖形設(shè)備接口來加載特定的設(shè)備驅(qū)動(dòng),一旦驅(qū)動(dòng)得以加載,就可以準(zhǔn)備應(yīng)用
10、設(shè)備進(jìn)行相關(guān)的操作這些任務(wù)都要通過創(chuàng)建和維護(hù)設(shè)備描述表來完成。在實(shí)現(xiàn)漢諾塔演示程序設(shè)計(jì)時(shí),是利用坐標(biāo)系統(tǒng)而得到的,而在Windows應(yīng)用程序中有兩種坐標(biāo)系統(tǒng):設(shè)備坐標(biāo)系統(tǒng)和邏輯坐標(biāo)系統(tǒng)。其中設(shè)備坐標(biāo)系統(tǒng)中又有三種相互獨(dú)立的坐標(biāo)系統(tǒng):屏幕坐標(biāo)系統(tǒng)、窗口坐標(biāo)系統(tǒng)和用戶區(qū)坐標(biāo)系統(tǒng)。這些坐標(biāo)系統(tǒng)均以像素點(diǎn)來表示度量的單位。屏幕坐標(biāo)系統(tǒng)使用整個(gè)屏幕作為坐標(biāo)區(qū)域,原點(diǎn)為屏幕原點(diǎn)。窗口坐標(biāo)系</p><p> 在計(jì)算機(jī)機(jī)圖形
11、學(xué)中窗口的定義是指在用戶坐標(biāo)系中定義的確定顯示內(nèi)容的一個(gè)矩形區(qū)域,只有在這個(gè)區(qū)域內(nèi)的圖形才能在設(shè)備坐標(biāo)系下輸出,而窗口外的部分則被截掉。視區(qū)是在設(shè)備坐標(biāo)中定義的一個(gè)區(qū)域,用于輸出窗口中的圖形。視區(qū)決定了窗口中的圖形要顯示于屏幕上的位置的大小。</p><p><b> 1.2 需求環(huán)境</b></p><p> 本課程設(shè)計(jì)需要的設(shè)備為硬件要求和軟件配置要求具體要求
12、如下:</p><p> ①硬件要求:一臺(tái)計(jì)算機(jī)。</p><p> ②軟件配置:WINDOWS、C/VC++6.0。</p><p><b> 1.3 功能描述</b></p><p> 簡(jiǎn)單計(jì)算器包括雙目運(yùn)算和單目運(yùn)算功能。雙目運(yùn)算符包含基本的四則運(yùn)算及乘冪功能,單目運(yùn)算符包含正余弦,階乘,對(duì)數(shù),開方,倒數(shù)等
13、運(yùn)算??蓪?duì)輸入任意操作數(shù),包括小數(shù)和整數(shù)及正數(shù)和負(fù)數(shù)進(jìn)行以上的所有運(yùn)算并能連續(xù)運(yùn)算。出現(xiàn)錯(cuò)誤會(huì)給出相應(yīng)提示,同時(shí)包含清除,退格,退出功能以及有與所有按鈕相對(duì)應(yīng)的菜單項(xiàng)。</p><p><b> 2 概要設(shè)計(jì)</b></p><p> 2.1 程序功能模塊</p><p> 如圖是整個(gè)計(jì)算器的流程圖,打開計(jì)算器程序,輸入數(shù)據(jù),調(diào)用輸入數(shù)
14、據(jù)子程序。子程序開始時(shí)m_num為零。按下數(shù)字按鈕后,判斷m_num的正負(fù)號(hào),對(duì)其進(jìn)行相關(guān)處理,然后在判斷是否有小數(shù)點(diǎn),處理后輸出結(jié)果。</p><p> 回到總流程圖中,輸完第一個(gè)操作數(shù)后,若按下雙目運(yùn)算符,則把m_num存入num2,按下輸入第二個(gè)操作數(shù)并算出結(jié)果。若按下的是單目運(yùn)算符,則直接對(duì)其處理得出結(jié)果。若按下清零,則m_num等于0.在運(yùn)算中還要判斷運(yùn)算是否合法,以及結(jié)果是否超出顯示范圍,以做出相關(guān)
15、提示,按下清零。算出后把結(jié)果保存至num2。若需用算出的結(jié)果繼續(xù)運(yùn)算則回到輸入完第一個(gè)操作數(shù)后,若不需要?jiǎng)t判斷試否需要開始新一輪的運(yùn)算,不需要?jiǎng)t結(jié)束。</p><p><b> 2.2 程序流程圖</b></p><p> 2.3 數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)</p><p> 根據(jù)需求分析將用遞歸算法實(shí)現(xiàn)計(jì)算器0演示過程的數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)如下:<
16、/p><p> 用一個(gè)結(jié)構(gòu)體數(shù)組struct M { int data[15]; int top; }num[3];來定義三個(gè)塔座的高度,以及每個(gè)塔座存放每個(gè)盤塊的代號(hào)。</p><p> 定義兩個(gè)變量cx,cy來分別表示程序演示步驟的橫坐標(biāo)和縱坐標(biāo)的變化。</p><p> 用函數(shù)void move(char x,char y,struct M num[3]);
17、來表示盤塊移動(dòng)的具體過程;并在move函數(shù)中調(diào)用函數(shù)void hanoi(char x,char y,char z,int n,struct M num[3]);來表示遞歸調(diào)用的過程;最后用一個(gè)初始化函數(shù)void Init(void)來對(duì)整個(gè)程序進(jìn)行初始化,并調(diào)用move函數(shù)。</p><p><b> 3 詳細(xì)設(shè)計(jì)</b></p><p><b> 3
18、.1 程序初始化</b></p><p><b> 3.1.1代碼功能</b></p><p> 在初始化程序中,主要實(shí)現(xiàn)的是畫出結(jié)構(gòu)框圖和對(duì)計(jì)算器的各個(gè)按鍵的功能設(shè)置。</p><p> 3.1.2 功能實(shí)現(xiàn)代碼</p><p> 1、09107xuzhujieDlg.h里變量的定義:</p&
19、gt;<p> BOOL ele2; // ele定義為布爾值,判斷當(dāng)前值是否是正數(shù)還是負(fù)數(shù)</p><p><b> int addt;</b></p><p><b> int i;</b></p><p> int dint;//dent判斷小數(shù)后的位數(shù)</p><p>
20、 BOOL ele; //ele2定義為布爾值,判斷是否有小數(shù)點(diǎn)</p><p> double num2;</p><p> double num1;</p><p> 2、程序運(yùn)行時(shí)初始化和頭文件:</p><p> m_num=0; //輸出框清0</p><p> num1=0; //變量1為0&l
21、t;/p><p> num2=0; //變量2為0</p><p> dint=0; //小數(shù)點(diǎn)位數(shù) </p><p> addt=0; //整數(shù)位數(shù)無</p><p> ele=FALSE; //當(dāng)前無小數(shù)</p><p> ele2=TRUE;</p><p> 09107xuzhu
22、jieDlg.cpp里加上頭文件#include "math.h"</p><p> 3、 數(shù)字鍵1的程序:(數(shù)字鍵2到9類似)</p><p> if(addt==0)num2=0;</p><p> if(ele2==TRUE)</p><p> m_num=m_num*10+1; //單擊數(shù)字鍵1后把數(shù)據(jù)傳送
23、到輸出框中</p><p> else m_num=m_num*10-1;</p><p> if (ele==TRUE) //當(dāng)前是否有小數(shù)點(diǎn),如果有</p><p><b> {</b></p><p><b> num1=1; </b></p><p> di
24、nt=dint++;</p><p> for (i=0;i<dint;i++)</p><p><b> {</b></p><p> num1=num1/10; //1/10,得到的小數(shù)放入輸出框中</p><p><b> }</b></p><p>
25、if (ele2==TRUE) //當(dāng)前值是否是正數(shù)還是負(fù)數(shù),如果是正數(shù)</p><p> m_num=(m_num-1)/10+num1; //前面不加負(fù)號(hào)</p><p><b> else</b></p><p> m_num=(m_num+1)/10-num1; //否則前面加負(fù)號(hào)</p><p><
26、b> }</b></p><p> UpdateData(FALSE); //數(shù)據(jù)刷新</p><p> 5、 加法鍵+的程序:(-,*,/,x,x^y的代碼類似)</p><p> if(num2==0)</p><p> {num2=m_num; //把第二個(gè)值賦于輸出框的成員變量</p><
27、;p> m_num=0; //輸出框的成員變量清0</p><p> ele=FALSE; //當(dāng)前小數(shù)無</p><p> ele2=TRUE; //當(dāng)前符號(hào)為正</p><p> dint=0; //小數(shù)位數(shù)無</p><p><b> addt=1;</b></p><p>
28、;<b> }</b></p><p> 6、 Sqrt鍵的程序:</p><p> if(m_num!=0)num2=m_num;</p><p> if(m_num>=0)</p><p> {m_num=sqrt(num2); //對(duì)數(shù)進(jìn)行開根號(hào)</p><p> Upda
29、teData(FALSE); //數(shù)據(jù)刷新</p><p> num2=m_num;</p><p><b> }</b></p><p> else GetDlgItem(IDC_xianshi)->SetWindowText("錯(cuò)誤,負(fù)數(shù)不能開根號(hào)");</p><p><b&g
30、t; m_num=0;</b></p><p><b> num1=0;</b></p><p><b> dint=0;</b></p><p> ele=FALSE;</p><p> ele2=TRUE;</p><p><b> 7、
31、n!鍵的程序:</b></p><p> if(m_num!=0)num2=m_num;</p><p> if(fmod(num2,1)==0)</p><p><b> {m_num=1;</b></p><p> for(i=1;i<=num2;i++)m_num*=i; //對(duì)數(shù)進(jìn)行求階
32、乘</p><p> UpdateData(FALSE); //數(shù)據(jù)刷新</p><p> num2=m_num;</p><p> if(m_num>=1.7E308||m_num<-1.7E308)</p><p> GetDlgItem(IDC_xianshi)->SetWindowText("結(jié)果過
33、大,無法顯示");</p><p><b> }</b></p><p> else GetDlgItem(IDC_xianshi)->SetWindowText("不是整數(shù)無法進(jìn)行階乘運(yùn)算");</p><p><b> m_num=0;</b></p><p
34、><b> num1=0;</b></p><p><b> dint=0;</b></p><p> ele=FALSE;</p><p> ele2=TRUE;</p><p> 8、1/x鍵的程序:</p><p> if(m_num!=0)num2=
35、m_num;</p><p> if(num2!=0)</p><p><b> {</b></p><p> m_num=1.0/num2; //對(duì)數(shù)進(jìn)行求倒數(shù)</p><p> UpdateData(FALSE);//數(shù)據(jù)刷新</p><p> num2=m_num;</p&g
36、t;<p> if(m_num>=1.7E308||m_num<-1.7E308)</p><p> GetDlgItem(IDC_xianshi)->SetWindowText("結(jié)果過大,無法顯示");</p><p><b> } </b></p><p> else GetDl
37、gItem(IDC_xianshi)->SetWindowText("錯(cuò)誤,0不能求倒數(shù)");</p><p><b> m_num=0;</b></p><p><b> num1=0;</b></p><p><b> dint=0;</b></p>
38、<p> ele=FALSE;</p><p> ele2=TRUE;</p><p> 9、sin鍵的程序:(cos的代碼類似)</p><p> if(m_num!=0)num2=m_num;</p><p> m_num=sin(num2*3.1415926/180); //對(duì)數(shù)進(jìn)行正弦</p><
39、;p> UpdateData(FALSE); //數(shù)據(jù)刷新</p><p> num2=m_num;</p><p><b> m_num=0;</b></p><p><b> num1=0;</b></p><p><b> dint=0;</b></
40、p><p> ele=FALSE;</p><p> ele2=TRUE;</p><p> 10、ln鍵的程序:</p><p> if(m_num!=0)num2=m_num;</p><p> if(m_num>0)</p><p><b> {</b>
41、</p><p> m_num=log(num2); //對(duì)數(shù)進(jìn)行求ln</p><p> UpdateData(FALSE); //數(shù)據(jù)刷新</p><p> num2=m_num;</p><p><b> }</b></p><p> else GetDlgItem(IDC_xia
42、nshi)->SetWindowText("錯(cuò)誤,操作數(shù)需大于0");</p><p><b> m_num=0;</b></p><p><b> num1=0;</b></p><p><b> dint=0;</b></p><p> e
43、le=FALSE;</p><p> ele2=TRUE;</p><p><b> 11、=鍵的程序:</b></p><p> switch (addt) //數(shù)據(jù)判斷</p><p><b> {</b></p><p> case 0: //為實(shí)現(xiàn)連續(xù)按下兩
44、次等號(hào)后能清零</p><p> UpdateData(FALSE); //數(shù)據(jù)刷新</p><p><b> break;</b></p><p><b> case 1:</b></p><p> m_num=num2+m_num; //兩數(shù)相加</p><p>
45、 UpdateData(FALSE); //數(shù)據(jù)刷新</p><p><b> break;</b></p><p><b> case 2:</b></p><p> m_num=num2-m_num; //兩數(shù)相減</p><p> UpdateData(FALSE); //數(shù)據(jù)刷新&
46、lt;/p><p><b> break;</b></p><p><b> case 3:</b></p><p> m_num=num2*m_num; //兩數(shù)相乘</p><p> UpdateData(FALSE); //數(shù)據(jù)刷新</p><p><b>
47、; break;</b></p><p><b> case 4:</b></p><p> if (m_num==0) //在除法中,判斷除數(shù)是否為0</p><p> GetDlgItem(IDC_xianshi)->SetWindowText("錯(cuò)誤,0不能作除數(shù)");</p>
48、<p> else {m_num=num2/m_num;UpdateData(FALSE);}</p><p><b> break;</b></p><p><b> case 5:</b></p><p> m_num=pow(num2,m_num); //取模</p><p>
49、; UpdateData(FALSE); //數(shù)據(jù)刷新</p><p><b> break;</b></p><p><b> }</b></p><p> if(m_num>=1.7E308||m_num<-1.7E308)</p><p> GetDlgItem(IDC_
50、xianshi)->SetWindowText("結(jié)果過大,無法顯示");</p><p> num2=m_num;</p><p><b> m_num=0;</b></p><p><b> num1=0;</b></p><p><b> dint=
51、0;</b></p><p> ele=FALSE;</p><p><b> addt=0;</b></p><p> ele2=TRUE;</p><p> 12、清除鍵Clear的程序:</p><p> m_num=0; //輸出框清0</p><
52、p> num1=0; //變量1為0</p><p> num2=0; //變量2為0</p><p> dint=0; //小數(shù)無位數(shù)</p><p> addt=0; //整數(shù)位數(shù)無</p><p> ele=FALSE; //當(dāng)前無小數(shù)</p><p> ele2=TRUE; </p>
53、;<p> UpdateData(FALSE); //數(shù)據(jù)刷新</p><p> 13、退格鍵Backspace的程序:</p><p> if (ele==FALSE ) //判斷當(dāng)前是否有小數(shù)點(diǎn),如果沒有</p><p> m_num=m_num/10-fmod(m_num/10,1); //去掉小數(shù)位</p><p&g
54、t;<b> else</b></p><p><b> {</b></p><p> if (ele==TRUE && dint>0) //如果是小數(shù)</p><p><b> {</b></p><p> for (i=0;i<dint
55、-1;i++) //移動(dòng)小數(shù)點(diǎn)</p><p><b> {</b></p><p> m_num=m_num*10; //移動(dòng)至只有一個(gè)小數(shù)位</p><p><b> }</b></p><p> m_num=m_num-fmod(m_num,1); //去掉小數(shù)位</p>
56、<p> for (i=0;i<dint-1;i++) //小數(shù)點(diǎn)移至原來位置</p><p><b> {</b></p><p> m_num=m_num/10; </p><p><b> }</b></p><p><b> }</b><
57、;/p><p> dint=dint--;</p><p><b> }</b></p><p> if (dint==0)ele=FALSE;</p><p> if(m_num==0)ele2=TRUE;</p><p> UpdateData(FALSE); //數(shù)據(jù)刷新</p&
58、gt;<p> 14、退出鍵Exit的程序:</p><p><b> OnOK() ;</b></p><p> 15、關(guān)聯(lián)關(guān)于對(duì)話框代碼:</p><p> CAboutDlg dlgAbout;</p><p> dlgAbout.DoModal();</p><p&g
59、t; 3.2 盤塊的移動(dòng)過程</p><p><b> 3.2.1代碼功能</b></p><p> 盤塊的移動(dòng)實(shí)際上是一個(gè)出棧和入棧的過程,盤塊出棧后便將原來的地方涂黑,本塊代碼主要是實(shí)現(xiàn)顯示漢諾塔的具體移動(dòng)的演示過程及移動(dòng)步驟。</p><p> 3.2.2 功能實(shí)現(xiàn)代碼</p><p> void mov
60、e(char x,char y,struct M num[3])/*移動(dòng)的具體過程*/</p><p><b> {</b></p><p><b> int i;</b></p><p> char num1[3],num2[3];</p><p> sprintf(num1,"
61、%c",x-32);/*將小寫變成大寫,并轉(zhuǎn)換成字符串輸出*/</p><p> sprintf(num2,"%c",y-32);</p><p> setfillstyle(SOLID_FILL,BLACK);/*把原來的地方移去涂黑*/</p><p> setcolor(YELLOW);</p><p&g
62、t; outtextxy(20+cx,30+cy,num1);/*輸出移動(dòng)過程,每次移動(dòng)后縱坐標(biāo)加30*/</p><p> outtextxy(62+cx,30+cy,"-->");</p><p> outtextxy(130+cx,30+cy,num2);</p><p><b> cy+=30;</b>
63、</p><p> if(cy>210) /*橫坐標(biāo)換行后另起一列*/</p><p> { cx+=145;</p><p> cy=0;/*縱坐標(biāo)重新回到頂部開始顯示下一列的演示步驟 */</p><p><b> }</b></p><p> settextstyle(0,
64、0,2);</p><p> setfillstyle(SOLID_FILL,BLACK);/*把原來的地方移去涂黑*/</p><p> bar(100+150*(x-97)-(33-3*num[x-97].data[num[x-97].top]),400-20*num</p><p> [x-97].top-8,100+150*(x-97)+(33-3*&
65、lt;/p><p> num[x-97].data[num[x-97].top]),400-20*num[x-97].top+8);num[y-97].top++;/*入棧,目標(biāo)點(diǎn)的top加1*/</p><p> num[y-97].data[num[y-97].top]=num[x-97].data[num[x-97].top];/*在目標(biāo)點(diǎn)盤子的代號(hào)與源點(diǎn)盤子的代號(hào)相同*/</
66、p><p> num[x-97].top--;/*出棧,原來地方的top減1*/</p><p> setfillstyle(SOLID_FILL,num[y-97].data[num[y-97].top]+1);/*盤子顏色代碼是棧頂盤子代號(hào)加1*/</p><p> bar(100+150*(y-97)-(33-3*num[y-97].data[num[y-9
67、7].top]),400-20*</p><p> num[y-97].top-8,100+150*(y-97)+(33-3*num[y-97].data[num[y-97].top]),</p><p> 400-20*num[y-97].top+8);</p><p> getch( );/*自己按鍵盤來進(jìn)行手動(dòng)控制*/</p><p&
68、gt;<b> 3.3 遞歸函數(shù)</b></p><p><b> 3.3.1 流程圖</b></p><p> 根據(jù)概要設(shè)計(jì)中的實(shí)現(xiàn)遞歸函數(shù)過程的流程圖設(shè)計(jì)如圖3.3所示:</p><p> 圖3.1 遞歸函數(shù)</p><p> 3.3.2 功能實(shí)現(xiàn)代碼</p><
69、p> 漢諾塔演示程序設(shè)計(jì)主要是利用遞歸調(diào)用函數(shù)實(shí)現(xiàn)。函數(shù)調(diào)用hanoi( one,two,three,n,num)表示將n個(gè)盤塊從A座移到C座的過程,函數(shù)調(diào)用move(one,three,num)是將1個(gè)盤塊從A座移到C座的過程。其具體代碼實(shí)現(xiàn)如下:</p><p><b> if(n==1)</b></p><p> move(one,three,num
70、);/*如果盤子為1,將這個(gè)盤子從塔座A移動(dòng)到塔座C*/</p><p><b> else</b></p><p><b> {</b></p><p> hanoi(one,three,two,n-1,num);/*將塔座A的前n-1個(gè)盤子移到塔座B*/</p><p> move(on
71、e,three,num);/*將塔座A的第n個(gè)盤子移到塔座C*/</p><p> hanoi(two,one,three,n-1,num); /*將塔座B的n-1個(gè)盤子移到塔座C*/</p><p><b> }</b></p><p><b> 4 測(cè)試與運(yùn)行</b></p><p>
72、由需求分析可知,漢諾塔演示程序設(shè)計(jì)是在TC環(huán)境下利用遞歸算法實(shí)現(xiàn)大小不同的盤子移動(dòng)的全過程演示。本程序已調(diào)試成功并實(shí)現(xiàn)了其功能,當(dāng)移動(dòng)盤塊數(shù)為3時(shí),其運(yùn)行結(jié)果如下:</p><p> 圖4.1 盤塊移動(dòng)前</p><p> 圖4.2 盤塊移動(dòng)中</p><p> 圖4.3 盤塊移動(dòng)后</p><p><b> 結(jié)束語<
73、/b></p><p> 在這次課程設(shè)計(jì)中,我基本上完成了任務(wù),通過遞歸調(diào)用算法實(shí)現(xiàn)了漢諾塔的演示過程,以及盤塊移動(dòng)的具體步驟的顯示,基本上達(dá)到了此次課程設(shè)計(jì)的要求。但是它的不足也是顯而易見的,在盤塊移動(dòng)的過程中用方向鍵移動(dòng)時(shí)會(huì)一次顯示兩個(gè)步驟,這給用戶的實(shí)際操作帶來了一定的困難,所以這是值得改進(jìn)的地方,整個(gè)程序的功能有待進(jìn)一步完善,讓更多的方法能得以實(shí)現(xiàn)。</p><p> 雖
74、然在這次的課程設(shè)計(jì)中有很多的不足,但是我也有很多的收獲。上網(wǎng)查找資料,找到了一個(gè)基于TC對(duì)話框而實(shí)現(xiàn)的漢諾塔演示程序設(shè)計(jì),于是我們就開始研究它的算法,如何畫三個(gè)塔座,如何填充盤塊的顏色,如何實(shí)現(xiàn)盤塊的移動(dòng)。再運(yùn)用這些知識(shí)在TC中實(shí)現(xiàn)這次課程設(shè)計(jì)所要完成的任務(wù)。這讓我不僅對(duì)TC開發(fā)環(huán)境有了更多的認(rèn)識(shí)和了解,對(duì)其圖形設(shè)備接口的知識(shí)也有了很好的掌握,而且讓我對(duì)圖形學(xué)的知識(shí)有了更好的運(yùn)用,拓展了對(duì)圖形學(xué)的知識(shí)了解的視野,讓我的理論知識(shí)和算法有了
75、更多的實(shí)踐。作為一個(gè)大的項(xiàng)目,我更體會(huì)到了團(tuán)隊(duì)合作精神的重要性,雖然我的設(shè)計(jì)是一個(gè)人一組的,但我深刻地認(rèn)識(shí)到只有大家一起努力地學(xué)習(xí)并研究相關(guān)的知識(shí),才能提高做事的效率,也才能更好更快地完成任務(wù)。所以這將在我以后的學(xué)習(xí)和生活中有很在的引導(dǎo)作用。在以后的學(xué)習(xí)中,我也將加倍地學(xué)習(xí)圖形學(xué)的有關(guān)知識(shí),以同樣的方法學(xué)習(xí)其他的知識(shí),不斷地豐富自己,充實(shí)自己,提高自己的能力。</p><p><b> 參考文獻(xiàn)<
76、;/b></p><p> [1] Hearn(赫恩)Baker 著.計(jì)算機(jī)圖形學(xué)== Computer Graphics:C語言版. 清華大學(xué)出版社,2004</p><p> [2] 陳桂芳. 微型計(jì)算機(jī)圖形學(xué). 北京理工大學(xué)出版社. 1989</p><p> [3] 陳元琰編著.計(jì)算機(jī)圖形學(xué)實(shí)用技術(shù).科學(xué)出版社.2000</p&
77、gt;<p> [4] 柳朝陽,周曉平.計(jì)算機(jī)圖形學(xué):圖形的計(jì)算與顯示原理. 西安電子科技大學(xué)出版社 .2005</p><p> [5] 陸潤(rùn)民.C語言繪圖教程.清華大學(xué)出版社.1996</p><p> [6] 陳錦昌,趙明秀.C語言計(jì)算機(jī)繪圖教程.華南理工大學(xué)出版社.1998.9</p><p> [7] 楊昂岳.微機(jī)實(shí)用繪圖方
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 計(jì)算器java課程設(shè)計(jì)--簡(jiǎn)單計(jì)算器
- 計(jì)算器課程設(shè)計(jì)---計(jì)算器仿真程序設(shè)計(jì)
- 課程設(shè)計(jì)-計(jì)算器
- c++計(jì)算器課程設(shè)計(jì)--計(jì)算器程序設(shè)計(jì)
- java計(jì)算器課程設(shè)計(jì)報(bào)告---模擬科學(xué)計(jì)算器
- java計(jì)算器課程設(shè)計(jì)-- 計(jì)算器的設(shè)計(jì)與實(shí)現(xiàn)
- java計(jì)算器課程設(shè)計(jì)---計(jì)算器模擬程序
- fpga課程論文-基于fpga的計(jì)算器設(shè)計(jì)
- 計(jì)算器的設(shè)計(jì)與實(shí)現(xiàn)課程設(shè)計(jì)論文
- java課程設(shè)計(jì)—計(jì)算器
- java課程設(shè)計(jì)計(jì)算器
- java計(jì)算器課程設(shè)計(jì)
- 計(jì)算器課程設(shè)計(jì)報(bào)告
- 簡(jiǎn)易計(jì)算器課程設(shè)計(jì)
- 軟件課程設(shè)計(jì)計(jì)算器
- java課程設(shè)計(jì)--計(jì)算器
- java課程設(shè)計(jì)計(jì)算器
- 簡(jiǎn)易計(jì)算器課程設(shè)計(jì)
- 微機(jī)課程設(shè)計(jì)--計(jì)算器
- 微機(jī)課程設(shè)計(jì)--計(jì)算器
評(píng)論
0/150
提交評(píng)論