小貓和小明一起玩游戲,小明對(duì)小貓說(shuō):“小貓你能根據(jù)我的指令在舞臺(tái)上行走嗎?”小貓說(shuō):“好啊,開(kāi)始吧。”小明說(shuō):“走一個(gè)正三角形,走一個(gè)正方形,走一個(gè)正五邊形……”“哎呀,正五邊形我可不會(huì)走?!毙∝堈f(shuō):“你教教我吧?!?/p>
編程是可以解決實(shí)際問(wèn)題的,現(xiàn)在我們就用“分析問(wèn)題一抽象建模一算法設(shè)計(jì)一編程執(zhí)行”的步驟來(lái)解決怎樣走出符合要求的形狀這個(gè)實(shí)際的問(wèn)題吧。
根據(jù)問(wèn)題場(chǎng)景,界定需要用Scratch解決的問(wèn)題是:從鍵盤(pán)給出“邊數(shù)”賦值,根據(jù)邊數(shù)畫(huà)出對(duì)應(yīng)的正多邊形。
分析角色:“小貓”,“要畫(huà)出正幾邊形?”,需要輸入框。如圖1。
抽象是軟件開(kāi)發(fā)的基礎(chǔ),就是找到事物的重要特征,過(guò)濾或忽略非本質(zhì)的細(xì)節(jié)。比如地圖就是地形的抽象。根據(jù)抽象到的條件構(gòu)造一個(gè)與之相似的問(wèn)題,這個(gè)新問(wèn)題稱(chēng)之為模型。相同的事物可以有不同的模型,解決問(wèn)題也會(huì)因此有差異。抽象建模是實(shí)用但又非常高深的學(xué)問(wèn),我們這里有個(gè)簡(jiǎn)單的概念就可以了。
這里我們抽象出畫(huà)正三角形的方法,發(fā)現(xiàn)主要特征有:邊數(shù)、內(nèi)角和外角。如圖2。這就是抽象建模過(guò)程。通過(guò)表格繼續(xù)總結(jié)更多正多邊形的規(guī)律:正多邊形內(nèi)角公式(n-2)×180°/n,正多邊形外角為360°/n。
算法是解決問(wèn)題的方法。根據(jù)剛才的總結(jié),在確定邊數(shù)n的情況下,圖形的內(nèi)角和的公式為(n-2)×180°,正多邊形外角和恒定為360°。我們的抽象模型中要素除了邊數(shù)n以外,選擇內(nèi)角或外角都是可以的,但是經(jīng)過(guò)分析選擇外角要素用于計(jì)算更簡(jiǎn)單。
下面用流程圖描述算法。如圖3。
首先根據(jù)功能需求自定義“賦值”和“繪畫(huà)”積木。通過(guò)模塊區(qū)分可以分別執(zhí)行需要的功能,便于調(diào)試和升級(jí)。比如1.0版只詢(xún)問(wèn)邊數(shù),根據(jù)邊數(shù)畫(huà)出固定邊長(zhǎng)的正多邊形,在調(diào)試中發(fā)現(xiàn)邊數(shù)過(guò)多時(shí)會(huì)畫(huà)出舞臺(tái)邊緣。于是2.0版就新增變量“邊長(zhǎng)”,并相應(yīng)升級(jí)賦值和繪畫(huà)積木。在3.0版中還可以判斷輸入的數(shù)值,避免出現(xiàn)小數(shù)、負(fù)數(shù)的輸入導(dǎo)致繪圖錯(cuò)誤。
賦值部分的編程,通過(guò)詢(xún)問(wèn)和回答為變量“邊數(shù)”和“邊長(zhǎng)”賦值。詢(xún)問(wèn)時(shí)顯示,繪圖時(shí)小貓隱藏。如圖4。
繪畫(huà)部分的編程,在自制積木中制作新的積木并添加邊數(shù)和邊長(zhǎng)兩個(gè)輸入項(xiàng)。重復(fù)執(zhí)行邊數(shù)次,每次移動(dòng)邊長(zhǎng)后左轉(zhuǎn)360°÷邊數(shù)。如圖5。
整體編程就非常簡(jiǎn)單了,擦除上一次的結(jié)果,開(kāi)始新的一次賦值和繪畫(huà)就可以了。如圖6。
雖然整個(gè)實(shí)例非常簡(jiǎn)單,一句話就是正多邊形外角和為360°,但是編程解題的思路“分析問(wèn)題一抽象建模一算法設(shè)計(jì)一編程執(zhí)行”都體現(xiàn)在這里面了哦。同時(shí)我們還復(fù)習(xí)了控制中的重復(fù)執(zhí)行、偵測(cè)模塊的詢(xún)問(wèn)和回答、數(shù)據(jù)模塊的建立變量。