MATLAB講稿_6-綜合編程_第1頁
MATLAB講稿_6-綜合編程_第2頁
MATLAB講稿_6-綜合編程_第3頁
MATLAB講稿_6-綜合編程_第4頁
MATLAB講稿_6-綜合編程_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、MATLAB的使用n第六章:復雜編程MATLAB程序設計基礎1、漢諾塔、漢諾塔漢諾塔問題漢諾塔(又稱河內塔)問題其實是印度的一個古老的傳漢諾塔問題漢諾塔(又稱河內塔)問題其實是印度的一個古老的傳說。說。開天辟地的神勃拉瑪(和中國的盤古差不多的神吧)在一個廟里留開天辟地的神勃拉瑪(和中國的盤古差不多的神吧)在一個廟里留下了三根金剛石的棒,第一根上面套著下了三根金剛石的棒,第一根上面套著64個圓的金片,最大的一個個圓的金片,最大的一個在底下,其余一個比一個小,依次疊上去,廟里的眾僧不倦地把它在底下,其余一個比一個小,依次疊上去,廟里的眾僧不倦地把它們一個個地從這根棒搬到另一根棒上,規(guī)定可利用中間的

2、一根棒作們一個個地從這根棒搬到另一根棒上,規(guī)定可利用中間的一根棒作為幫助,但每次只能搬一個,而且大的不能放在小的上面。計算結為幫助,但每次只能搬一個,而且大的不能放在小的上面。計算結果非常恐怖果非??植?移動圓片的次數(shù)移動圓片的次數(shù))18446744073709551615,眾僧,眾僧們即便是耗盡畢生精力也不可能完成金片的移動了??梢杂嬎阋幌?,們即便是耗盡畢生精力也不可能完成金片的移動了??梢杂嬎阋幌?,即使人用最快的速度移動圓片,也要用幾百億年才能完成上面數(shù)字即使人用最快的速度移動圓片,也要用幾百億年才能完成上面數(shù)字所代表的次數(shù)。所代表的次數(shù)。MATLAB程序設計基礎1.1 算法一算法一一位美

3、國學者發(fā)現(xiàn)了一種非常簡單的算法。當盤子的個數(shù)為n時,移動的次數(shù)應等于2n 1(有興趣的可以自己證明試試看)。只要輪流進行兩步操作就可以了。首先把三根柱子按順序排成品字型,把所有的圓盤按從大到小的順序放在柱子A上,根據(jù)圓盤的數(shù)量確定柱子的排放順序:若n為偶數(shù),按順時針方向依次擺放 A B C;若n為奇數(shù),則按逆時針方向依次擺放A B C。MATLAB程序設計基礎(1)按順時針方向把圓盤1從現(xiàn)在的柱子移動到下一根柱子,即當n為偶數(shù)時,若圓盤1在柱子A,則把它移動到B;若圓盤1在柱子B,則把它移動到C;若圓盤1在柱子C,則把它移動到A。(2)接著,把另外兩根柱子上可以移動的圓盤移動到新的柱子上。即把

4、非空柱子上的圓盤移動到空柱子上,當兩根柱子都非空時,移動較小的圓盤。這一步?jīng)]有明確規(guī)定移動哪個圓盤,你可能以為會有多種可能性,其實不然,可實施的行動是唯一的。反復進行(1)(2)操作,最后就能按規(guī)定完成漢諾塔的移動。MATLAB程序設計基礎1.2 算法二算法二漢諾塔問題漢諾塔問題也是程序設計中的經(jīng)典遞歸問題。遞歸算法見程序下面分別是使用遞歸算法、非遞歸算法編寫的程序執(zhí)行的結果。MATLAB程序設計基礎2、N皇后問題皇后問題第五種程序執(zhí)行流程:函數(shù)調用第五種程序執(zhí)行流程:函數(shù)調用這種流程與跳轉有所不同,需要保存主調函數(shù)運行環(huán)境。這種流程與跳轉有所不同,需要保存主調函數(shù)運行環(huán)境。MATLAB程序設

5、計基礎MATLAB程序設計基礎MATLAB程序設計基礎MATLAB程序設計基礎三種基本三種基本數(shù)據(jù)結構數(shù)據(jù)結構線性樹圖MATLAB程序設計基礎程序執(zhí)行流與數(shù)據(jù)流程序執(zhí)行流與數(shù)據(jù)流count,res=queen_solve(1,4,0,)queen_checkValidate(1,1,)1count,res=queen_solve(2,4,1,0,)2queen_checkValidate(2,1,1)34queen_checkValidate(2,2,1)56queen_checkValidate(2,3,1)7count,res=queen_solve(3,4,1,3,0,)8queen_c

6、heckValidate(3,1,1,3)910queen_checkValidate(3,2,1,3)1112queen_checkValidate(3,3,1,3)1314queen_checkValidate(3,4,1,3)151617queen_checkValidate(2,4,1)18queen_checkValidate(1,4,)queen_checkValidate(1,3,)queen_checkValidate(1,2,)MATLAB程序設計基礎count,res=queen_solve(i,n,curPath,count,data)i=nj=nj=1queen_che

7、ckValidate(i,j,curPath)curPath(i)=jcount,res=queen_solve(i+1,n,curPath,count,data)count=count+1; datacount=curPath;j=j+1queen_solve函數(shù)函數(shù)程序流程圖程序流程圖MATLAB程序設計基礎queen_checkValidate函數(shù)函數(shù)程序流程圖程序流程圖queen_checkValidate(i,j,curPath)k=i-1k=1curPath(k)=jres=0;i-k=abs(j-curPath(k)res=0;res=1K=k+1MATLAB程序設計基礎n執(zhí)行結

8、果執(zhí)行結果MATLAB程序設計基礎3、俄羅斯方塊、俄羅斯方塊俄羅斯方塊游戲,程序文件夾俄羅斯方塊游戲,程序文件夾Tetris,函數(shù)列表:,函數(shù)列表:Tetris_Main主函數(shù)主函數(shù)Tetris_View 視圖函數(shù),相當于用視圖函數(shù),相當于用guide創(chuàng)建的圖形用戶界面創(chuàng)建的圖形用戶界面Callback_Tetris_Start啟動按鈕的回調函數(shù),開始游戲啟動按鈕的回調函數(shù),開始游戲Callback_Tetris_Stop結束按鈕的回調函數(shù),停止游戲結束按鈕的回調函數(shù),停止游戲Tetris_Create隨機產(chǎn)生一個形狀的方塊隨機產(chǎn)生一個形狀的方塊Tetris_Fall方塊正常下落方塊正常下落T

9、etris_CouldDown判斷方塊是否可以繼續(xù)下落判斷方塊是否可以繼續(xù)下落Tetris_Check檢查整個區(qū)域,消掉可以消掉的行檢查整個區(qū)域,消掉可以消掉的行Callback_Tetris_Left左按鈕的回調函數(shù),方塊向左移動左按鈕的回調函數(shù),方塊向左移動Callback_Tetris_Rot翻轉按鈕的回調函數(shù),方塊翻轉翻轉按鈕的回調函數(shù),方塊翻轉Callback_Tetris_Right右按鈕的回調函數(shù),方塊向右移動右按鈕的回調函數(shù),方塊向右移動Callback_Tetris_Down下按鈕的回調函數(shù),方塊加速向下移動下按鈕的回調函數(shù),方塊加速向下移動MATLAB程序設計基礎Tetri

10、s_Main主函數(shù)主函數(shù)初始化方塊擺放區(qū)域的數(shù)據(jù)、方塊形狀數(shù)初始化方塊擺放區(qū)域的數(shù)據(jù)、方塊形狀數(shù)據(jù)、控制變量據(jù)、控制變量創(chuàng)建計時器創(chuàng)建計時器創(chuàng)建窗體創(chuàng)建窗體調用視圖函數(shù)調用視圖函數(shù)MATLAB程序設計基礎Tetris_View 視圖函數(shù)視圖函數(shù)通過調用通過調用matlab提供的各個控件函數(shù),在當前窗體上添加各提供的各個控件函數(shù),在當前窗體上添加各種控件,并設定各種屬性,包括回調函數(shù)。種控件,并設定各種屬性,包括回調函數(shù)。MATLAB程序設計基礎Callback_Tetris_Start 開始游戲開始游戲Callback_Tetris_Stop 停止游戲停止游戲開始游戲和停止游戲都是對定時器進行

11、操作,分別是啟動和停止定開始游戲和停止游戲都是對定時器進行操作,分別是啟動和停止定時器。時器。定時器也是一種控件,但是不可見,屬性中有兩個重要的值,一個定時器也是一種控件,但是不可見,屬性中有兩個重要的值,一個是時間間隔,一個是回調函數(shù),定時器啟動后,每個一個時是時間間隔,一個是回調函數(shù),定時器啟動后,每個一個時間間隔,調用回調函數(shù)一次。間間隔,調用回調函數(shù)一次。定時器是實現(xiàn)動畫控制的另一種方式,與定時器是實現(xiàn)動畫控制的另一種方式,與Pause函數(shù)相比,前者是函數(shù)相比,前者是非阻塞程序,后者是阻塞程序。非阻塞程序,后者是阻塞程序。MATLAB程序設計基礎Tetris_Create 隨機產(chǎn)生一個

12、形狀的方塊隨機產(chǎn)生一個形狀的方塊在主函數(shù)中,初始化了俄羅斯方塊游戲中有可能出現(xiàn)的各種在主函數(shù)中,初始化了俄羅斯方塊游戲中有可能出現(xiàn)的各種形狀對應的數(shù)據(jù)。在這個函數(shù)中,通過調用隨機數(shù),從主函形狀對應的數(shù)據(jù)。在這個函數(shù)中,通過調用隨機數(shù),從主函數(shù)中創(chuàng)建的形狀中隨機選擇一個形狀,隨機的翻轉幾個數(shù)中創(chuàng)建的形狀中隨機選擇一個形狀,隨機的翻轉幾個90度,度,然后在繪制區(qū)域、游戲區(qū)域分別繪制出來。然后在繪制區(qū)域、游戲區(qū)域分別繪制出來。在這個函數(shù)中,開始向公共工作區(qū)中寫入數(shù)據(jù),供后續(xù)調用在這個函數(shù)中,開始向公共工作區(qū)中寫入數(shù)據(jù),供后續(xù)調用的函數(shù)使用。的函數(shù)使用。MATLAB程序設計基礎Tetris_Fall方

13、塊正常下落方塊正常下落使得方塊下降一次,對數(shù)據(jù)進行計算處理使得方塊下降一次,對數(shù)據(jù)進行計算處理的同時,也進行繪制。的同時,也進行繪制。在下降之前,先判斷是否可以下降,下降在下降之前,先判斷是否可以下降,下降完后,判斷是否可以消行。完后,判斷是否可以消行。還要判斷是否還要判斷是否Game Over。如果方塊已經(jīng)不能下降,創(chuàng)建新的方塊。如果方塊已經(jīng)不能下降,創(chuàng)建新的方塊。MATLAB程序設計基礎Tetris_CouldDown判斷方塊是否可以繼續(xù)下落判斷方塊是否可以繼續(xù)下落矩陣中對應有方塊的位置,元素值為矩陣中對應有方塊的位置,元素值為1,否則為,否則為0。笨辦法,逐行逐列進行判斷,可以優(yōu)化。笨辦法,逐行逐列進行判斷,可以優(yōu)化。MATLAB程序設計基礎Tetris_Check消行消行對于矩陣中全為對于矩陣中全為1的行,刪掉,追加一個全的行,刪掉,追加一個全0行。行。也是笨辦法,逐行逐列的判斷,可以優(yōu)化。也是笨辦法,逐行逐列的判斷,可以優(yōu)化。MATLAB程序設計基礎Callback_Tetris_Left

溫馨提示

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

評論

0/150

提交評論