




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
漢諾塔動態(tài)演示一課題分析1.1設(shè)計(jì)要求在Visualc++環(huán)境下編寫漢諾塔的程序并運(yùn)行出漢諾塔游戲。能夠改變漢諾塔塔盤的數(shù)量??梢噪娔X演示移動過程,也可以人為移動,并且能夠控制塔盤移動速度。實(shí)現(xiàn)漢諾塔的簡單動態(tài)演示。目的了解在開發(fā)環(huán)境中如何編輯,編譯,連接和運(yùn)行一個C語言程序。通過運(yùn)行漢諾塔的程序,初步了解C語言程序的結(jié)構(gòu)特點(diǎn)。掌握C語言數(shù)據(jù)類型的概念,學(xué)會使用C語言的相關(guān)運(yùn)算符構(gòu)成表達(dá)式。背景世界范圍內(nèi)信息技術(shù)迅猛開展,新的技術(shù)和方法層出不窮。C語言在計(jì)算機(jī)應(yīng)用中發(fā)揮著重要作用,并且在全世界普及推廣。作為當(dāng)代大學(xué)生,有必要掌握和會運(yùn)用C語言。意義這次課程設(shè)計(jì),可以培養(yǎng)我們獨(dú)立自主的學(xué)習(xí)能力,實(shí)事求是的學(xué)習(xí)態(tài)度,嚴(yán)謹(jǐn)治學(xué)的學(xué)習(xí)作風(fēng),通過實(shí)踐,建立系統(tǒng)設(shè)計(jì)的整體思想,鍛煉編寫程序、調(diào)試程序的能力,學(xué)習(xí)文檔編寫標(biāo)準(zhǔn),吸取他人經(jīng)驗(yàn)、探索前言知識的習(xí)慣,樹立團(tuán)隊(duì)協(xié)作精神。同時課程設(shè)計(jì)還可以彌補(bǔ)我們自身在實(shí)踐時所缺少的經(jīng)驗(yàn)。這次對于漢諾塔這個問題的研究是我在C語言課程學(xué)習(xí)中遞歸函數(shù)的一次實(shí)際運(yùn)用,對我的遞歸函數(shù)的理解會有更多的幫助。1.2實(shí)現(xiàn)功能運(yùn)用數(shù)據(jù)結(jié)構(gòu)的相關(guān)知識,利用一定的算法制作出漢諾塔程序。能輸入塔盤的數(shù)量〔10以內(nèi)〕和塔盤移動速度,支持人和電腦操作,并且顯示移動過程和移動次數(shù),實(shí)現(xiàn)漢諾塔的動態(tài)演示。漢諾塔游戲漢諾塔游戲塔盤數(shù)量設(shè)置移動速度調(diào)節(jié)操作對象選擇移動過程顯示圖1漢諾塔功能結(jié)構(gòu)圖二整體設(shè)計(jì)2.1框架設(shè)計(jì)游戲開始游戲開始輸入塔盤數(shù)量n輸入塔盤數(shù)量n2≤2≤n≤10調(diào)用while〔〕進(jìn)入主循環(huán)調(diào)用while〔〕進(jìn)入主循環(huán)是否為人是否為人移動塔盤移動塔盤輸入移動速度輸入移動速度是否小盤在大盤上是否小盤在大盤上塔盤全部在C座塔盤全部在C座輸出移動次數(shù)輸出移動次數(shù)游戲結(jié)束游戲結(jié)束圖2漢諾塔流程圖三詳細(xì)設(shè)計(jì)3.1問題描述假設(shè)有三個分別命名為A,B和C的塔座,在塔座B上插有n個直徑大小各不相同、從小到大編號為1,2,…,n的圓盤?,F(xiàn)要求將塔座B上的n個圓盤移至塔座A上并仍按同樣順序疊排,圓盤移動時必須遵守以下規(guī)那么:〔1〕每次只能移動一個圓盤;〔2〕圓盤可以插在A,B和C中任一塔上;〔3〕任何時刻都不能將一個較大的圓盤壓在較小的圓盤之上。
要求:用程序模擬上述問題解決方法,并輸出移動的總次數(shù),圓盤的個數(shù)從鍵盤輸入;并想方法計(jì)算出程序運(yùn)行的時間。3.2算法思路3.2.1建立數(shù)學(xué)模型這個問題可用遞歸法解決,并用數(shù)學(xué)歸納法又個別得出普遍解法:
假設(shè)塔座B上有3個圓盤移動到塔座A上:
〔1〕將塔座B上2個圓盤借助塔座A移動到塔座C上;
〔2〕將塔座B上1個圓盤移動到塔座A上;
〔3〕將塔座C上2個圓盤借助塔座B移動到塔座A上。
其中第2步可以直接實(shí)現(xiàn)。第1步又可用遞歸方法分解為:
1.1"將塔座B上1個圓盤從塔座X移動到塔座A;
1.2"將塔座B上1個圓盤從塔座X移動到塔座C;
1.3"將塔座A上1個圓盤從塔座Z移動到塔座C。
第3步可以分解為:將塔座C上1個圓盤從塔座Y移動到塔座B;將塔座C上1個圓盤從塔座Y移動到塔座將塔座B上1個圓盤從塔座X移動到塔座A。
綜上所述:可得到移動3個圓盤的步驟為
B->A,B->C,A->C,B->A,C->B,C->A,B->A,3.2.2算法設(shè)計(jì)將n個圓盤由B依次移到A,C作為輔助塔座。當(dāng)n=1時,可以直接完成。否那么,將塔座B頂上的n-1個圓盤借助塔座A移動到塔座C上;然后將圓盤B上第n個圓盤移到塔座A上;最后將塔座C上的n-1個圓盤移到塔座A上,并用塔座3.2運(yùn)用類的介紹主類Tower成員變量描述變量類型名稱漢諾塔對象HannoiTowertower塔名數(shù)組Char[]TowerName盤子數(shù)目int盤子數(shù)目pfloat盤子從上到下縮小的比例盤子大小Int盤寬,盤高自動演示線程ThreadThread自動演示文字顯示搬運(yùn)過程TextArea信息條菜單條JMenuBarbar菜單JMenufileMenu1,fileMenu2,fileMenu3菜單項(xiàng)JMenuItem開始游戲,重新開始,自動演示,英雄榜,退出,背景音樂,幫助主題,關(guān)于漢諾塔;顯示時間JTextField顯示時間類HannoiTower成員變量描述變量類型變量名位置intX,Ypfloat盤子從上到下縮小的比例搬運(yùn)坐標(biāo)intShartx,Starty,Starti盤子數(shù)目int盤子數(shù)目塔名charTowername[]時間intspendtime塔點(diǎn)TowerPointpoint[]移動狀態(tài)booleanmove盤子Disk盤子[]顯示移動信息TextArea信息條用來計(jì)時Time計(jì)時計(jì)時器是否啟動boolean計(jì)時器是否啟動類TowerPoint成員變量描述變量類型變量名位置IntX,Y查看是否有盤子boolean有盤子創(chuàng)立盤子Disk盤子創(chuàng)立塔HannoiTowercon類Disk成員變量描述變量類型變量名數(shù)目intnumber上方有無盤子boolean上方有盤類Time成員變量描述變量類型變量名時間inttime計(jì)時器計(jì)時器顯示時間JTextField顯示時間計(jì)時器是否啟動boolean計(jì)時器是否啟動四總結(jié)這次對于漢諾塔的課程設(shè)計(jì)我有很多心得和體會,課程設(shè)計(jì)所設(shè)計(jì)制作出來的漢諾塔游戲總體符合設(shè)計(jì)要求,但也有一些缺點(diǎn)和缺乏,沒能完全到達(dá)預(yù)期的要求。通過課程設(shè)計(jì),我們對C語言的掌握提高到了一個新的水平,能夠應(yīng)用C語言編寫出一個實(shí)用的程序,很大程度上提高了程序綜合設(shè)計(jì)能力、分析能力和編程能力。掌握了很多新的編程技巧,積累了一些編程經(jīng)驗(yàn)這些技巧和經(jīng)驗(yàn)對于以后的課程都是很重要的。因此我覺得這次課程設(shè)計(jì)雖然困難不小,但收獲很大。編寫程序其中最重要的一個方面就是要認(rèn)真,認(rèn)真編寫代碼可。以大大減少錯誤的出現(xiàn);其次是要有耐心,勇于克服困難,不斷解決問題,面對困難要永不退縮,迎難而上;再次是要有清晰的思維,能夠理清各個函數(shù)之間的關(guān)系,明確各個函數(shù)的職能;最后還要和同學(xué)多交流合作,多參考書籍。參考文獻(xiàn)【01】譚浩強(qiáng)《C程序設(shè)計(jì)》第4版清華大學(xué)出版社2023【02】C語言程序設(shè)計(jì)精品課程網(wǎng)站漢諾塔程序設(shè)計(jì)2023.6【03】覃征,王志敏《程序設(shè)計(jì)方法與優(yōu)化》西安交通大學(xué)出版社2004【04】彭四偉,趙彤洲,高巍《C語言程序設(shè)計(jì)》清華大學(xué)出版社2002附錄#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<string.h>#include<math.h>structT{ inth; //塔的高度 intx; //塔的第一個盤的x坐標(biāo),y坐標(biāo)等于(7+n-塔的高度h) intl; //塔的第一個盤的長度 }ta[3]={{10,15,2},{0,0,0},{0,0,0}};charhnt[18][79]= {""}, {"漢諾塔動畫演示"}, {""}, {"╔════════════════════════════════════╗"}, {"║║"}, {"║║"}, {"║║"}, {"║▆║"}, {"║▆▆║"}, {"║▆▆▆║"}, {"║▆▆▆▆║"}, {"║▆▆▆▆▆║"}, {"║▆▆▆▆▆▆║"}, {"║▆▆▆▆▆▆▆║"}, {"║▆▆▆▆▆▆▆▆║"}, {"║▆▆▆▆▆▆▆▆▆║"}, {"║▆▆▆▆▆▆▆▆▆▆║"}, {"╚════════════════════════════════════╝"}};intn;intsum=0;intcomputerorpeople=1;intspeed=0;voidcount_ta_1(intta_1){ inti; intj; intk=0; for(i=7;i<7+n;i++) for(j=4+ta_1*24;j<28+ta_1*24;j++) { if(hnt[i][j]!='') { for(;hnt[i][j+k]!='';k++); ta[ta_1].x=j; ta[ta_1].l=k; return; } } }voidmove(intta_1,intta_3){ inti; sum++; ta[ta_3].h++; ta[ta_3].x=ta[ta_1].x+(ta_3-ta_1)*24; ta[ta_3].l=ta[ta_1].l; for(i=0;i<ta[ta_1].l;i++) { hnt[7+n-ta[ta_3].h][ta[ta_3].x+i]=hnt[7+n-ta[ta_1].h][ta[ta_1].x+i]; hnt[7+n-ta[ta_1].h][ta[ta_1].x+i]=''; } ta[ta_1].h--; count_ta_1(ta_1); system("cls"); for(i=0;i<7+n;i++) printf("%s\n",hnt[i]); printf("%s",hnt[17]); printf("\n\n從%c塔移動一個盤到%c塔\n",ta_1+65,ta_3+65); printf("\n步數(shù):%d\n\n",sum); if(computerorpeople==2) system("pause"); else for(i=0;i<200000*speed;i++); }voidhanoi(intta_1,intta_2,intta_3,intm)//遞歸,ta_1/ta_2/ta_3分別為座塔的代號,m為盤子數(shù){if(m==1)move(ta_1,ta_3); //如果盤子為,將這個盤子從塔座A移動到塔座Celse{hanoi(ta_1,ta_3,ta_2,m-1); //將塔座A的前m-1個盤子移到塔座Bmove(ta_1,ta_3); //將塔座A的第m個盤子移到塔座Chanoi(ta_2,ta_1,ta_3,m-1); //將塔座B的m-1個盤子移到塔座C}}intmain(){ inti; printf("請輸入漢諾塔的高度〔范圍->10〕:"); scanf("%d",&n); printf("請選擇:輸入由電腦自動控制;\n"); printf("輸入由人控制。\n"); printf("請輸入:"); scanf("%d",&computerorpeople); if(computerorpeople!=1&&computerorpeople!=2) computerorpeople=1; if(computerorpeople==1) { printf("請輸入移動盤的速度(例如:輸入那么代表秒):"); scanf("%d",&speed); } if(n<1||n>10) n=10; ta[0].h=n; system("cls"); for(i=0;i<7+n;i++) printf("%s\n",hnt[i]); printf("%s\n\n",hnt[17]); system("pause");hanoi(0,1,2,n); if(computerorpeople==1) return0;}【小組分工合作情況
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025飲料分銷代理合同
- 2025銷售勞動合同模板
- 2025公司服裝供貨合同
- 2025維修合同 設(shè)備維修合同
- 2025辦公室租賃合同附加協(xié)議
- 瓷磚銷售類勞動合同協(xié)議
- 班干部任職合同協(xié)議
- 病人護(hù)理中介合同協(xié)議
- 電力作業(yè)人員合同協(xié)議
- 皮卡配件供貨合同協(xié)議
- 非洲自然災(zāi)害
- 2023詩詞大會知識競賽200題題庫(含答案)
- TL226 大眾試驗(yàn)測試標(biāo)準(zhǔn)
- 2023借款協(xié)議書Word模板
- 生產(chǎn)設(shè)備拆除工程施工方案
- (完整版)年產(chǎn)30萬噸合成氨合成工段工藝設(shè)計(jì)畢業(yè)論文
- 無障礙公共設(shè)施建設(shè)的問題及其對策研究
- 臨床醫(yī)學(xué)(???畢業(yè)綜合考復(fù)習(xí)題
- 石家莊市存量房買賣合同
- 思想道德與法治2023版教學(xué)設(shè)計(jì)第六章 學(xué)習(xí)法治思想 提升法治素養(yǎng)
- 自來水廠調(diào)試方案
評論
0/150
提交評論